Shader: Fix dependency check of modules

This commit is contained in:
SirLynix
2022-04-05 08:35:12 +02:00
parent 7f15c66f16
commit 18edd41048
5 changed files with 66 additions and 45 deletions

View File

@@ -30,10 +30,10 @@ namespace Nz::ShaderAst
inline void MarkFunctionAsUsed(std::size_t funcIndex);
inline void MarkStructAsUsed(std::size_t structIndex);
inline void Process(Statement& statement);
void Process(Statement& statement, const Config& config);
inline void Register(Statement& statement);
void Register(Statement& statement, const Config& config);
inline void Resolve();
inline void Resolve(bool allowUnknownId = false);
DependencyCheckerVisitor& operator=(const DependencyCheckerVisitor&) = delete;
DependencyCheckerVisitor& operator=(DependencyCheckerVisitor&&) = delete;
@@ -53,7 +53,8 @@ namespace Nz::ShaderAst
private:
UsageSet& GetContextUsageSet();
void Resolve(const UsageSet& usageSet);
void RegisterType(UsageSet& usageSet, const ExpressionType& exprType);
void Resolve(const UsageSet& usageSet, bool allowUnknownId);
using AstRecursiveVisitor::Visit;

View File

@@ -22,15 +22,15 @@ namespace Nz::ShaderAst
m_globalUsage.usedStructs.UnboundedSet(structIndex);
}
inline void DependencyCheckerVisitor::Process(Statement& statement)
inline void DependencyCheckerVisitor::Register(Statement& statement)
{
Config defaultConfig;
return Process(statement, defaultConfig);
return Register(statement, defaultConfig);
}
void DependencyCheckerVisitor::Resolve()
inline void DependencyCheckerVisitor::Resolve(bool allowUnknownId)
{
Resolve(m_globalUsage);
Resolve(m_globalUsage, allowUnknownId);
}
}

View File

@@ -17,9 +17,9 @@ namespace Nz::ShaderAst
{
DependencyCheckerVisitor dependencyVisitor;
for (const auto& importedModule : shaderModule.importedModules)
dependencyVisitor.Process(*importedModule.module->rootNode, config);
dependencyVisitor.Register(*importedModule.module->rootNode, config);
dependencyVisitor.Process(*shaderModule.rootNode, config);
dependencyVisitor.Register(*shaderModule.rootNode, config);
dependencyVisitor.Resolve();
return EliminateUnusedPass(shaderModule, dependencyVisitor.GetUsage());
@@ -40,7 +40,7 @@ namespace Nz::ShaderAst
inline StatementPtr EliminateUnusedPass(Statement& ast, const DependencyCheckerVisitor::Config& config)
{
DependencyCheckerVisitor dependencyVisitor;
dependencyVisitor.Process(ast, config);
dependencyVisitor.Register(ast, config);
dependencyVisitor.Resolve();
return EliminateUnusedPass(ast, dependencyVisitor.GetUsage());