diff --git a/include/Nazara/Shader/Ast/DependencyCheckerVisitor.hpp b/include/Nazara/Shader/Ast/DependencyCheckerVisitor.hpp index 0361b7951..ad72e8ee4 100644 --- a/include/Nazara/Shader/Ast/DependencyCheckerVisitor.hpp +++ b/include/Nazara/Shader/Ast/DependencyCheckerVisitor.hpp @@ -27,6 +27,8 @@ namespace Nz::ShaderAst inline const UsageSet& GetUsage() const; + inline void MarkStructAsUsed(std::size_t structIndex); + inline void Process(Statement& statement); void Process(Statement& statement, const Config& config); @@ -37,7 +39,7 @@ namespace Nz::ShaderAst struct Config { - ShaderStageTypeFlags usedShaderStages = ShaderStageType_All; + ShaderStageTypeFlags usedShaderStages; }; struct UsageSet diff --git a/include/Nazara/Shader/Ast/DependencyCheckerVisitor.inl b/include/Nazara/Shader/Ast/DependencyCheckerVisitor.inl index 034af84fb..f1708fd41 100644 --- a/include/Nazara/Shader/Ast/DependencyCheckerVisitor.inl +++ b/include/Nazara/Shader/Ast/DependencyCheckerVisitor.inl @@ -12,6 +12,11 @@ namespace Nz::ShaderAst return m_resolvedUsage; } + inline void DependencyCheckerVisitor::MarkStructAsUsed(std::size_t structIndex) + { + m_globalUsage.usedStructs.UnboundedSet(structIndex); + } + inline void DependencyCheckerVisitor::Process(Statement& statement) { Config defaultConfig; diff --git a/src/Nazara/Shader/SpirvWriter.cpp b/src/Nazara/Shader/SpirvWriter.cpp index 079e2e9f4..702c8a202 100644 --- a/src/Nazara/Shader/SpirvWriter.cpp +++ b/src/Nazara/Shader/SpirvWriter.cpp @@ -522,8 +522,11 @@ namespace Nz { ShaderAst::StatementPtr tempAst; + ShaderAst::DependencyCheckerVisitor::Config dependencyConfig; + dependencyConfig.usedShaderStages = ShaderStageType_All; + tempAst = ShaderAst::PropagateConstants(*targetAst); - optimizedAst = ShaderAst::EliminateUnusedPass(*tempAst); + optimizedAst = ShaderAst::EliminateUnusedPass(*tempAst, dependencyConfig); targetAst = optimizedAst.get(); }