compiler: Add ability to dump incoming spirv
diff --git a/icd/intel/compiler/shader/compiler_interface.cpp b/icd/intel/compiler/shader/compiler_interface.cpp
index 02a1f4b..7a18633 100644
--- a/icd/intel/compiler/shader/compiler_interface.cpp
+++ b/icd/intel/compiler/shader/compiler_interface.cpp
@@ -438,9 +438,10 @@
shader_program->Type = shader->Stage;
bool dump_ast = false;
+ bool dump_SPV = false;
bool dump_hir = false;
- _mesa_glsl_compile_shader(ctx, shader, dump_ast, dump_hir);
+ _mesa_glsl_compile_shader(ctx, shader, dump_ast, dump_SPV, dump_hir);
if (strlen(shader->InfoLog) > 0) {
printf("Info log:\n%s\n", shader->InfoLog);
diff --git a/icd/intel/compiler/shader/glsl_parser_extras.cpp b/icd/intel/compiler/shader/glsl_parser_extras.cpp
index 2177dba..a2f40b9 100644
--- a/icd/intel/compiler/shader/glsl_parser_extras.cpp
+++ b/icd/intel/compiler/shader/glsl_parser_extras.cpp
@@ -32,6 +32,9 @@
#include "Frontends/glslang/GlslangToTop.h"
#include "Frontends/SPIRV/SpvToTop.h"
#include "SPIRV/GlslangToSpv.h"
+#include "SPIRV/GLSL450Lib.h"
+#include "SPIRV/disassemble.h"
+#include "SPIRV/doc.h"
#include "glsl_glass_manager.h"
#include "glsl_glass_backend_translator.h"
@@ -1566,9 +1569,11 @@
}
}
+const char* GlslStd450DebugNames[GLSL_STD_450::Count];
+
void
_mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader,
- bool dump_ast, bool dump_hir)
+ bool dump_ast, bool dump_SPV, bool dump_hir)
{
const char* infoLog = "";
@@ -1643,6 +1648,12 @@
for (int x=0; x<shader->Size; ++x)
spv.push_back(((unsigned int *)shader->Source)[x]);
+ if (dump_SPV) {
+ spv::Parameterize();
+ GLSL_STD_450::GetDebugNames(GlslStd450DebugNames);
+ spv::Disassemble(std::cout, spv);
+ }
+
gla::SpvToTop(spv, *manager);
} else {
state->error = true;
diff --git a/icd/intel/compiler/shader/program.h b/icd/intel/compiler/shader/program.h
index d44294d..fcd9a45 100644
--- a/icd/intel/compiler/shader/program.h
+++ b/icd/intel/compiler/shader/program.h
@@ -30,7 +30,7 @@
extern void
_mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader,
- bool dump_ast, bool dump_hir);
+ bool dump_ast, bool dump_SPV, bool dump_hir);
#ifdef __cplusplus
} /* extern "C" */