SpirvShader: Stub OpenCL.DebugInfo.100

This change adds the logic to recognise the OpenCL.DebugInfo.100 extension and handle its instructions, but does not do anything with them (yet).

The actual handling of these instructions comes in a later change.

Bug: b/145351270
Change-Id: I8d68d583e1588d62e6c68fcc4365161fddf83509
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/40131
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 2257017..0da463c 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -425,6 +425,7 @@
 			{
 				auto const extensionsByName = std::initializer_list<std::pair<const char *, Extension::Name>>{
 					{ "GLSL.std.450", Extension::GLSLstd450 },
+					{ "OpenCL.DebugInfo.100", Extension::OpenCLDebugInfo100 },
 				};
 				auto id = Extension::ID(insn.word(1));
 				auto name = insn.string(2);
@@ -684,6 +685,9 @@
 					case Extension::GLSLstd450:
 						DefineResult(insn);
 						break;
+					case Extension::OpenCLDebugInfo100:
+						DefineOpenCLDebugInfo100(insn);
+						break;
 					default:
 						UNREACHABLE("Unexpected Extension name %d", int(getExtension(insn.word(3)).name));
 						break;
@@ -2348,6 +2352,8 @@
 	{
 		case Extension::GLSLstd450:
 			return EmitExtGLSLstd450(insn, state);
+		case Extension::OpenCLDebugInfo100:
+			return EmitOpenCLDebugInfo100(insn, state);
 		default:
 			UNREACHABLE("Unknown Extension::Name<%d>", int(ext.name));
 	}
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 1274909..f9c953b 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -389,6 +389,7 @@
 		{
 			Unknown,
 			GLSLstd450,
+			OpenCLDebugInfo100
 		};
 
 		Name name;
@@ -769,6 +770,10 @@
 	// Creates an Object for the instruction's result in 'defs'.
 	void DefineResult(const InsnIterator &insn);
 
+	// Processes the OpenCL.Debug.100 instruction for the initial definition
+	// pass of the SPIR-V.
+	void DefineOpenCLDebugInfo100(const InsnIterator &insn);
+
 	// Returns true if data in the given storage class is word-interleaved
 	// by each SIMD vector lane, otherwise data is stored linerally.
 	//
@@ -1093,6 +1098,7 @@
 	EmitResult EmitSelect(InsnIterator insn, EmitState *state) const;
 	EmitResult EmitExtendedInstruction(InsnIterator insn, EmitState *state) const;
 	EmitResult EmitExtGLSLstd450(InsnIterator insn, EmitState *state) const;
+	EmitResult EmitOpenCLDebugInfo100(InsnIterator insn, EmitState *state) const;
 	EmitResult EmitLine(InsnIterator insn, EmitState *state) const;
 	EmitResult EmitAny(InsnIterator insn, EmitState *state) const;
 	EmitResult EmitAll(InsnIterator insn, EmitState *state) const;
diff --git a/src/Pipeline/SpirvShaderDebugger.cpp b/src/Pipeline/SpirvShaderDebugger.cpp
index 1342c21..7c45d13 100644
--- a/src/Pipeline/SpirvShaderDebugger.cpp
+++ b/src/Pipeline/SpirvShaderDebugger.cpp
@@ -672,6 +672,15 @@
 	return EmitResult::Continue;
 }
 
+void SpirvShader::DefineOpenCLDebugInfo100(const InsnIterator &insn)
+{
+}
+
+SpirvShader::EmitResult SpirvShader::EmitOpenCLDebugInfo100(InsnIterator insn, EmitState *state) const
+{
+	return EmitResult::Continue;
+}
+
 }  // namespace sw
 
 #else  // ENABLE_VK_DEBUGGER
@@ -690,6 +699,13 @@
 void SpirvShader::dbgUpdateActiveLaneMask(RValue<SIMD::Int> mask, EmitState *state) const {}
 void SpirvShader::dbgDeclareResult(const InsnIterator &insn, Object::ID resultId) const {}
 
+void SpirvShader::DefineOpenCLDebugInfo100(const InsnIterator &insn) {}
+
+SpirvShader::EmitResult SpirvShader::EmitOpenCLDebugInfo100(InsnIterator insn, EmitState *state) const
+{
+	return EmitResult::Continue;
+}
+
 SpirvShader::EmitResult SpirvShader::EmitLine(InsnIterator insn, EmitState *state) const
 {
 	return EmitResult::Continue;