From 36e5356c2258165d1e578450defcb42e066782bd Mon Sep 17 00:00:00 2001 From: SirLynix Date: Tue, 19 Apr 2022 18:30:40 +0200 Subject: [PATCH] Shader: Fix import of already compiled module --- src/Nazara/Shader/Ast/SanitizeVisitor.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp index 64cf87fb7..21ca31b85 100644 --- a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp +++ b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp @@ -1752,8 +1752,17 @@ namespace Nz::ShaderAst ModulePtr sanitizedModule = std::make_shared(targetModule->metadata); + // Remap already used indices + IndexRemapperVisitor::Callbacks indexCallbacks; + indexCallbacks.constIndexGenerator = [this](std::size_t /*previousIndex*/) { return m_context->constantValues.RegisterNewIndex(true); }; + indexCallbacks.funcIndexGenerator = [this](std::size_t /*previousIndex*/) { return m_context->functions.RegisterNewIndex(true); }; + indexCallbacks.structIndexGenerator = [this](std::size_t /*previousIndex*/) { return m_context->structs.RegisterNewIndex(true); }; + indexCallbacks.varIndexGenerator = [this](std::size_t /*previousIndex*/) { return m_context->variableTypes.RegisterNewIndex(true); }; + + sanitizedModule->rootNode = StaticUniquePointerCast(RemapIndices(*targetModule->rootNode, indexCallbacks)); + std::string error; - sanitizedModule->rootNode = SanitizeInternal(*targetModule->rootNode, &error); + sanitizedModule->rootNode = SanitizeInternal(*sanitizedModule->rootNode, &error); if (!sanitizedModule->rootNode) throw ShaderLang::CompilerModuleCompilationFailedError{ node.sourceLocation, node.moduleName, error };