Merge branch 'master' into nzsl-modules
This commit is contained in:
@@ -17,9 +17,9 @@ namespace Nz::ShaderAst
|
||||
DependencyCheckerVisitor usageChecker;
|
||||
};
|
||||
|
||||
StatementPtr EliminateUnusedPassVisitor::Process(Statement& statement)
|
||||
StatementPtr EliminateUnusedPassVisitor::Process(Statement& statement, const Config& config)
|
||||
{
|
||||
Context context;
|
||||
Context context(config);
|
||||
statement.Visit(context.usageChecker);
|
||||
context.usageChecker.Resolve();
|
||||
|
||||
|
||||
@@ -2271,23 +2271,35 @@ namespace Nz::ShaderAst
|
||||
TypeMustMatch(resolvedType, GetExpressionType(*node.initialExpression));
|
||||
}
|
||||
|
||||
if (m_context->options.makeVariableNameUnique && FindIdentifier(node.varName) != nullptr)
|
||||
{
|
||||
// Try to make variable name unique by appending _X to its name (incrementing X until it's unique) to the variable name until by incrementing X
|
||||
unsigned int cloneIndex = 2;
|
||||
std::string candidateName;
|
||||
do
|
||||
{
|
||||
candidateName = node.varName + "_" + std::to_string(cloneIndex++);
|
||||
}
|
||||
while (FindIdentifier(candidateName) != nullptr);
|
||||
|
||||
node.varName = std::move(candidateName);
|
||||
}
|
||||
|
||||
node.varIndex = RegisterVariable(node.varName, resolvedType);
|
||||
node.varType = std::move(resolvedType);
|
||||
|
||||
if (m_context->options.makeVariableNameUnique)
|
||||
{
|
||||
// Since we are registered, FindIdentifier will find us
|
||||
auto IgnoreOurself = [varIndex = *node.varIndex](const Identifier& identifier)
|
||||
{
|
||||
if (identifier.type == Identifier::Type::Variable && identifier.index == varIndex)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
if (FindIdentifier(node.varName, IgnoreOurself) != nullptr)
|
||||
{
|
||||
// Try to make variable name unique by appending _X to its name (incrementing X until it's unique) to the variable name until by incrementing X
|
||||
unsigned int cloneIndex = 2;
|
||||
std::string candidateName;
|
||||
do
|
||||
{
|
||||
candidateName = node.varName + "_" + std::to_string(cloneIndex++);
|
||||
}
|
||||
while (FindIdentifier(candidateName, IgnoreOurself) != nullptr);
|
||||
|
||||
node.varName = std::move(candidateName);
|
||||
}
|
||||
}
|
||||
|
||||
SanitizeIdentifier(node.varName);
|
||||
}
|
||||
|
||||
|
||||
@@ -180,8 +180,12 @@ namespace Nz
|
||||
{
|
||||
ShaderAst::StatementPtr tempAst;
|
||||
|
||||
ShaderAst::EliminateUnusedPassVisitor::Config eliminateUnunsedConfig;
|
||||
if (shaderStage)
|
||||
eliminateUnunsedConfig.usedShaderStages = *shaderStage;
|
||||
|
||||
tempAst = ShaderAst::PropagateConstants(*targetAst);
|
||||
optimizedAst = ShaderAst::EliminateUnusedPass(*tempAst);
|
||||
optimizedAst = ShaderAst::EliminateUnusedPass(*tempAst, eliminateUnunsedConfig);
|
||||
|
||||
targetAst = optimizedAst.get();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user