SpirvShaderDebugger: Add PRINT_EACH_DEFINED_DBG_INSTRUCTION
Prints each debug instruction as it is defined. Yet another tool in debugging the debugger.
Also rename `PRINT_EACH_PROCESSED_INSTRUCTION` to `PRINT_EACH_EMITTED_INSTRUCTION` as that's really what it meant.
Bug: b/148401179
Change-Id: I9ddf90eab1919deefb5f4557756364478f06375a
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/48430
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShaderDebugger.cpp b/src/Pipeline/SpirvShaderDebugger.cpp
index ea2adc8..1608bc5 100644
--- a/src/Pipeline/SpirvShaderDebugger.cpp
+++ b/src/Pipeline/SpirvShaderDebugger.cpp
@@ -14,8 +14,10 @@
#include "SpirvShader.hpp"
-// If enabled, each instruction will be printed before processing.
-#define PRINT_EACH_PROCESSED_INSTRUCTION 0
+// If enabled, each instruction will be printed before defining.
+#define PRINT_EACH_DEFINED_DBG_INSTRUCTION 0
+// If enabled, each instruction will be printed before emitting.
+#define PRINT_EACH_EMITTED_INSTRUCTION 0
// If enabled, each instruction will be printed before executing.
#define PRINT_EACH_EXECUTED_INSTRUCTION 0
// If enabled, debugger variables will contain debug information (addresses,
@@ -2048,7 +2050,7 @@
void SpirvShader::dbgBeginEmitInstruction(InsnIterator insn, EmitState *state) const
{
-# if PRINT_EACH_PROCESSED_INSTRUCTION
+# if PRINT_EACH_EMITTED_INSTRUCTION
{
auto instruction = spvtools::spvInstructionBinaryToText(
SPV_ENV_VULKAN_1_1,
@@ -2059,7 +2061,7 @@
SPV_BINARY_TO_TEXT_OPTION_NO_HEADER);
printf("%s\n", instruction.c_str());
}
-# endif // PRINT_EACH_PROCESSED_INSTRUCTION
+# endif // PRINT_EACH_EMITTED_INSTRUCTION
# if PRINT_EACH_EXECUTED_INSTRUCTION
{
@@ -2162,6 +2164,19 @@
void SpirvShader::DefineOpenCLDebugInfo100(const InsnIterator &insn)
{
+# if PRINT_EACH_DEFINED_DBG_INSTRUCTION
+ {
+ auto instruction = spvtools::spvInstructionBinaryToText(
+ SPV_ENV_VULKAN_1_1,
+ insn.wordPointer(0),
+ insn.wordCount(),
+ insns.data(),
+ insns.size(),
+ SPV_BINARY_TO_TEXT_OPTION_NO_HEADER);
+ printf("%s\n", instruction.c_str());
+ }
+# endif // PRINT_EACH_DEFINED_DBG_INSTRUCTION
+
auto dbg = impl.debugger;
if(!dbg) { return; }