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 };