From dc2a9ed2e569c5436420e4ddf1ad64a8bea7d7cc Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Wed, 10 Dec 2025 13:24:25 +0000 Subject: [PATCH] few more features seem to cause conflicts move clearing of the map out of flushproceduralshaders, this function is now empty, not sure if this is going to cause issues elsewhere but what was happening was postfx manager was setting the hdr format after the level had been loaded, the materials for a few objects were being setup but then the shadergen process would execute on them again and it would clear the cache and cause double ups --- .../source/shaderGen/HLSL/shaderFeatureHLSL.h | 2 - Engine/source/shaderGen/shaderGen.cpp | 38 ++++++++++--------- Engine/source/terrain/hlsl/terrFeatureHLSL.h | 3 -- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h index 58a3eb4bf..aa2f59261 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h @@ -180,8 +180,6 @@ public: void processPix( Vector &componentList, const MaterialFeatureData &fd ) override; - - U32 getShaderStages() override { return GFXShaderStage::PIXEL_SHADER; } U32 getOutputTargets( const MaterialFeatureData &fd ) const override { return mOutputTargetMask; } }; diff --git a/Engine/source/shaderGen/shaderGen.cpp b/Engine/source/shaderGen/shaderGen.cpp index f78033c34..23fa7a398 100644 --- a/Engine/source/shaderGen/shaderGen.cpp +++ b/Engine/source/shaderGen/shaderGen.cpp @@ -30,6 +30,7 @@ #include "gfx/gfxDevice.h" #include "core/memVolume.h" #include "core/module.h" +#include "console/persistenceManager.h" #ifdef TORQUE_D3D11 #include "shaderGen/HLSL/customFeatureHLSL.h" @@ -95,6 +96,14 @@ ShaderGen::~ShaderGen() _uninit(); mFileCache.clear(); + + for (ShaderDataMap::Pair data : mProcShaderData) + { + if (data.value->isProperlyAdded() && !data.value->isDeleted()) + data.value->unregisterObject(); + } + + mProcShaderData.clear(); } void ShaderGen::registerInitDelegate(GFXAdapterType adapterType, ShaderGenInitDelegate& initDelegate) @@ -272,14 +281,20 @@ void ShaderGen::generateShader( const MaterialFeatureData& featureData, case VERTEX_SHADER: _processVertFeatures(macros, skipRegen); if (skipRegen) + { + LangElement::deleteElements(); continue; + } _printVertShader(*stream); ((ShaderConnector*)mComponents[C_CONNECTOR])->reset(); break; case PIXEL_SHADER: _processPixFeatures(macros, skipRegen); if (skipRegen) + { + LangElement::deleteElements(); continue; + } _printPixShader(*stream); break; case GEOMETRY_SHADER: @@ -568,14 +583,14 @@ GFXShader* ShaderGen::getShader(const MaterialFeatureData& featureData, const GF String cacheKey = Torque::getStringHash64(shaderDescription); + Vector shaderMacros; + shaderMacros.push_back(GFXShaderMacro("TORQUE_SHADERGEN")); + if (macros) + shaderMacros.merge(*macros); + ShaderDataMap::iterator dat = mProcShaderData.find(cacheKey); if (dat != mProcShaderData.end()) { - Vector shaderMacros; - shaderMacros.push_back(GFXShaderMacro("TORQUE_SHADERGEN")); - if (macros) - shaderMacros.merge(*macros); - // should we loop vertex shader features to build mInstancingFormat before sending it down to see old hob? return dat->value->getShader(shaderMacros); } @@ -589,26 +604,15 @@ GFXShader* ShaderGen::getShader(const MaterialFeatureData& featureData, const GF shaderData->setSamplerName(samplers[samp], samp); } - Vector shaderMacros; - shaderMacros.push_back(GFXShaderMacro("TORQUE_SHADERGEN")); - if (macros) - shaderMacros.merge(*macros); - generateShader(featureData, shaderData, vertexFormat, cacheKey, shaderMacros); shaderData->setInstancingFormat(&mInstancingFormat); - shaderData->registerObject(); - mProcShaderData[cacheKey] = shaderData; + mProcShaderData.insert(cacheKey, shaderData); return shaderData->getShader(shaderMacros); } void ShaderGen::flushProceduralShaders() { - for (auto data : mProcShaderData) - { - data.value->deleteObject(); - } - mProcShaderData.clear(); } diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.h b/Engine/source/terrain/hlsl/terrFeatureHLSL.h index 9901faf34..b65b1335b 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.h +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.h @@ -153,8 +153,6 @@ public: void processPix( Vector &componentList, const MaterialFeatureData &fd ) override; - - U32 getShaderStages() override { return GFXShaderStage::PIXEL_SHADER; } Resources getResources( const MaterialFeatureData &fd ) override; @@ -184,7 +182,6 @@ public: void processPix(Vector &componentList, const MaterialFeatureData &fd) override; String getName() override { return "Blank Matinfo map"; } - U32 getShaderStages() override { return GFXShaderStage::PIXEL_SHADER; } }; class TerrainHeightMapBlendHLSL : public TerrainFeatHLSL