Handle more instructions in spirv analysis pass
Most of these are "we know we can just ignore this instruction", but
also sanity check for the lowering passes applied before this -- if any
of those instructions remain, then we're very likely to do the wrong
thing.
Bug: b/124388146
Change-Id: I3f8f66121f57f20cc93abdbd26c575baf03d9c94
Reviewed-on: https://swiftshader-review.googlesource.com/c/24597
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 92439a0..dfc18ce 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -194,7 +194,34 @@
case spv::OpMemoryModel:
// Memory model does not affect our code generation until we decide to do Vulkan Memory Model support.
case spv::OpEntryPoint:
- // Due to preprocessing, the entrypoint provides no value.
+ case spv::OpFunction:
+ case spv::OpFunctionEnd:
+ // Due to preprocessing, the entrypoint and its function provide no value.
+ break;
+ case spv::OpExtInstImport:
+ // We will only support the GLSL 450 extended instruction set, so no point in tracking the ID we assign it.
+ // Valid shaders will not attempt to import any other instruction sets.
+ break;
+
+ case spv::OpFunctionParameter:
+ case spv::OpFunctionCall:
+ case spv::OpSpecConstant:
+ case spv::OpSpecConstantComposite:
+ case spv::OpSpecConstantFalse:
+ case spv::OpSpecConstantOp:
+ case spv::OpSpecConstantTrue:
+ // These should have all been removed by preprocessing passes. If we see them here,
+ // our assumptions are wrong and we will probably generate wrong code.
+ UNIMPLEMENTED("These instructions should have already been lowered.");
+ break;
+
+ case spv::OpStore:
+ case spv::OpReturn:
+ // Don't need to do anything during analysis pass
+ break;
+
+ case spv::OpKill:
+ modes.ContainsKill = true;
break;
default: