only use dead input elimination on vertex shaders
authorMalcolm Bechard <malcolm@derivative.ca>
Wed, 28 Sep 2022 04:07:01 +0000 (00:07 -0400)
committerMalcolm Bechard <malcolm@derivative.ca>
Wed, 28 Sep 2022 04:07:01 +0000 (00:07 -0400)
It can't be safely used unilaterally on other stages, since that will
result in output/input mismatches between stages. They arn't
having their output variables eliminated accordingly.

SPIRV/SpvTools.cpp

index 8cc17cc..2529993 100644 (file)
@@ -212,7 +212,8 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
     optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass());
     if (options->optimizeSize) {
         optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
-        optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass());
+        if (intermediate.getStage() == EShLanguage::EShLangVertex)
+            optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass());
     }
     optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());