Shader: Fix dependency check of modules
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user