diff --git a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp index 5bc850b35..96a1a3c50 100644 --- a/src/Nazara/Shader/Ast/SanitizeVisitor.cpp +++ b/src/Nazara/Shader/Ast/SanitizeVisitor.cpp @@ -160,9 +160,9 @@ namespace Nz::ShaderAst std::unordered_map moduleByUuid; std::unordered_set declaredExternalVar; std::unordered_set usedBindingIndexes; - std::shared_ptr builtinEnv; - std::shared_ptr currentEnv; std::shared_ptr globalEnv; + std::shared_ptr currentEnv; + std::shared_ptr moduleEnv; IdentifierList constantValues; IdentifierList functions; IdentifierList aliases; @@ -189,26 +189,22 @@ namespace Nz::ShaderAst PreregisterIndices(module); - // Register builtin env - m_context->builtinEnv = std::make_shared(); - m_context->currentEnv = m_context->builtinEnv; + // Register global env + m_context->globalEnv = std::make_shared(); + m_context->currentEnv = m_context->globalEnv; RegisterBuiltin(); - m_context->globalEnv = std::make_shared(); - m_context->globalEnv->moduleId = clone->metadata->moduleId; - m_context->globalEnv->parentEnv = m_context->builtinEnv; + m_context->moduleEnv = std::make_shared(); + m_context->moduleEnv->moduleId = clone->metadata->moduleId; + m_context->moduleEnv->parentEnv = m_context->globalEnv; for (std::size_t moduleId = 0; moduleId < clone->importedModules.size(); ++moduleId) { - auto moduleEnv = std::make_shared(); - moduleEnv->moduleId = clone->importedModules[moduleId].module->metadata->moduleId; - moduleEnv->parentEnv = m_context->builtinEnv; + auto importedModuleEnv = std::make_shared(); + importedModuleEnv->moduleId = clone->importedModules[moduleId].module->metadata->moduleId; + importedModuleEnv->parentEnv = m_context->globalEnv; - m_context->currentEnv = moduleEnv; - - // Previous modules are visibles - for (std::size_t previousModuleId = 0; previousModuleId < moduleId; ++previousModuleId) - RegisterModule(clone->importedModules[previousModuleId].identifier, previousModuleId); + m_context->currentEnv = importedModuleEnv; auto& importedModule = clone->importedModules[moduleId]; importedModule.module->rootNode = SanitizeInternal(*importedModule.module->rootNode, error); @@ -217,13 +213,13 @@ namespace Nz::ShaderAst m_context->moduleByUuid[importedModule.module->metadata->moduleId] = moduleId; auto& moduleData = m_context->modules.emplace_back(); - moduleData.environment = std::move(moduleEnv); + moduleData.environment = std::move(importedModuleEnv); m_context->currentEnv = m_context->globalEnv; RegisterModule(importedModule.identifier, moduleId); } - m_context->currentEnv = m_context->globalEnv; + m_context->currentEnv = m_context->moduleEnv; clone->rootNode = SanitizeInternal(*module.rootNode, error); if (!clone->rootNode) @@ -1443,7 +1439,7 @@ namespace Nz::ShaderAst // Load new module auto moduleEnvironment = std::make_shared(); - moduleEnvironment->parentEnv = m_context->builtinEnv; + moduleEnvironment->parentEnv = m_context->globalEnv; auto previousEnv = m_context->currentEnv; m_context->currentEnv = moduleEnvironment;