From fa8c11ebe8f9b1bf2174a5a4dbe92a34c16811c8 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 12 Jun 2024 09:27:14 -0700 Subject: Add option to preserve shader parameter declaration in output SPIRV. (#4344) * Add option to preserve shader parameter declarations in output. * Add test. --- source/slang/slang-ir-ssa-simplification.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'source/slang/slang-ir-ssa-simplification.cpp') diff --git a/source/slang/slang-ir-ssa-simplification.cpp b/source/slang/slang-ir-ssa-simplification.cpp index 2a9c0da43..b8d6360ad 100644 --- a/source/slang/slang-ir-ssa-simplification.cpp +++ b/source/slang/slang-ir-ssa-simplification.cpp @@ -24,6 +24,9 @@ namespace Slang else result.cfgOptions = CFGSimplificationOptions::getDefault(); result.peepholeOptions = PeepholeOptimizationOptions(); + if (targetProgram) + result.deadCodeElimOptions.keepGlobalParamsAlive = targetProgram->getOptionSet().getBoolOption(CompilerOptionName::PreserveParameters); + result.deadCodeElimOptions.useFastAnalysis = result.minimalOptimization; return result; } @@ -33,6 +36,9 @@ namespace Slang result.minimalOptimization = targetProgram ? targetProgram->getOptionSet().shouldPerformMinimumOptimizations() : false; result.cfgOptions = CFGSimplificationOptions::getFast(); result.peepholeOptions = PeepholeOptimizationOptions(); + if (targetProgram) + result.deadCodeElimOptions.keepGlobalParamsAlive = targetProgram->getOptionSet().getBoolOption(CompilerOptionName::PreserveParameters); + result.deadCodeElimOptions.useFastAnalysis = result.minimalOptimization; return result; } @@ -45,8 +51,6 @@ namespace Slang const int kMaxIterations = 8; const int kMaxFuncIterations = 16; int iterationCounter = 0; - IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions(); - dceOptions.useFastAnalysis = options.minimalOptimization; while (changed && iterationCounter < kMaxIterations) { @@ -79,7 +83,7 @@ namespace Slang // Note: we disregard the `changed` state from dead code elimination pass since // SCCP pass could be generating temporarily evaluated constant values and never actually use them. // DCE will always remove those nearly generated consts and always returns true here. - eliminateDeadCode(func, dceOptions); + eliminateDeadCode(func, options.deadCodeElimOptions); if (funcIterationCount == 0) funcChanged |= constructSSA(func); changed |= funcChanged; @@ -88,7 +92,7 @@ namespace Slang } iterationCounter++; } - eliminateDeadCode(module, dceOptions); + eliminateDeadCode(module, options.deadCodeElimOptions); } void simplifyNonSSAIR(TargetProgram* target, IRModule* module, IRSimplificationOptions options) @@ -96,8 +100,6 @@ namespace Slang bool changed = true; const int kMaxIterations = 8; int iterationCounter = 0; - IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions(); - dceOptions.useFastAnalysis = options.minimalOptimization; while (changed && iterationCounter < kMaxIterations) { @@ -111,7 +113,7 @@ namespace Slang // Note: we disregard the `changed` state from dead code elimination pass since // SCCP pass could be generating temporarily evaluated constant values and never actually use them. // DCE will always remove those nearly generated consts and always returns true here. - eliminateDeadCode(module, dceOptions); + eliminateDeadCode(module, options.deadCodeElimOptions); iterationCounter++; } } @@ -119,9 +121,6 @@ namespace Slang void simplifyFunc(TargetProgram* target, IRGlobalValueWithCode* func, IRSimplificationOptions options, DiagnosticSink* sink) { - IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions(); - dceOptions.useFastAnalysis = options.minimalOptimization; - bool changed = true; const int kMaxIterations = 8; int iterationCounter = 0; @@ -140,7 +139,7 @@ namespace Slang // Note: we disregard the `changed` state from dead code elimination pass since // SCCP pass could be generating temporarily evaluated constant values and never actually use them. // DCE will always remove those nearly generated consts and always returns true here. - eliminateDeadCode(func, dceOptions); + eliminateDeadCode(func, options.deadCodeElimOptions); changed |= constructSSA(func); -- cgit v1.2.3