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
This commit is contained in:
marauder2k7 2025-12-10 13:24:25 +00:00
parent 4ceeb07ea0
commit dc2a9ed2e5
3 changed files with 21 additions and 22 deletions

View file

@ -180,8 +180,6 @@ public:
void processPix( Vector<ShaderComponent*> &componentList,
const MaterialFeatureData &fd ) override;
U32 getShaderStages() override { return GFXShaderStage::PIXEL_SHADER; }
U32 getOutputTargets( const MaterialFeatureData &fd ) const override { return mOutputTargetMask; }
};

View file

@ -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<GFXShaderMacro> shaderMacros;
shaderMacros.push_back(GFXShaderMacro("TORQUE_SHADERGEN"));
if (macros)
shaderMacros.merge(*macros);
ShaderDataMap::iterator dat = mProcShaderData.find(cacheKey);
if (dat != mProcShaderData.end())
{
Vector<GFXShaderMacro> 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<GFXShaderMacro> 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();
}

View file

@ -153,8 +153,6 @@ public:
void processPix( Vector<ShaderComponent*> &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<ShaderComponent*> &componentList,
const MaterialFeatureData &fd) override;
String getName() override { return "Blank Matinfo map"; }
U32 getShaderStages() override { return GFXShaderStage::PIXEL_SHADER; }
};
class TerrainHeightMapBlendHLSL : public TerrainFeatHLSL