Shader: Fix unroll duplicate identifier error with GLSL

This commit is contained in:
SirLynix 2022-04-14 09:07:14 +02:00
parent 6e47553b16
commit b52a380839
1 changed files with 10 additions and 6 deletions

View File

@ -1427,8 +1427,6 @@ namespace Nz::ShaderAst
return CloneFor(); //< can't resolve step value return CloneFor(); //< can't resolve step value
} }
PushScope();
auto multi = std::make_unique<MultiStatement>(); auto multi = std::make_unique<MultiStatement>();
auto Unroll = [&](auto dummy) auto Unroll = [&](auto dummy)
@ -1441,6 +1439,10 @@ namespace Nz::ShaderAst
for (; counter < to; counter += step) for (; counter < to; counter += step)
{ {
PushScope();
auto innerMulti = std::make_unique<MultiStatement>();
auto constant = ShaderBuilder::Constant(counter); auto constant = ShaderBuilder::Constant(counter);
constant->sourceLocation = node.sourceLocation; constant->sourceLocation = node.sourceLocation;
@ -1448,9 +1450,13 @@ namespace Nz::ShaderAst
var->sourceLocation = node.sourceLocation; var->sourceLocation = node.sourceLocation;
Validate(*var); Validate(*var);
multi->statements.emplace_back(std::move(var)); innerMulti->statements.emplace_back(std::move(var));
multi->statements.emplace_back(Unscope(CloneStatement(node.statement))); innerMulti->statements.emplace_back(Unscope(CloneStatement(node.statement)));
multi->statements.emplace_back(ShaderBuilder::Scoped(std::move(innerMulti)));
PopScope();
} }
}; };
@ -1468,8 +1474,6 @@ namespace Nz::ShaderAst
throw ShaderLang::AstInternalError{ node.sourceLocation, "unexpected counter type <TODO>" }; throw ShaderLang::AstInternalError{ node.sourceLocation, "unexpected counter type <TODO>" };
} }
PopScope();
return multi; return multi;
} }
} }