Hook up dump_shaders toggle to dump SPIRV and GLSL
Bug: none
Change-Id: I742067d70bac5b43afe38d8d39b5eb2dae647a74
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/60960
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index 79a9514..54eff8d 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -434,7 +434,9 @@
if (!spirvTools.Validate(code, codeSize)) {
std::string disassembly;
if (spirvTools.Disassemble(std::vector<uint32_t>(code, code + codeSize),
- &disassembly)) {
+ &disassembly,
+ SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES |
+ SPV_BINARY_TO_TEXT_OPTION_INDENT)) {
errorStream << "disassembly:" << std::endl << disassembly;
}
diff --git a/src/dawn_native/opengl/ShaderModuleGL.cpp b/src/dawn_native/opengl/ShaderModuleGL.cpp
index 6aac35de..3b9bec6 100644
--- a/src/dawn_native/opengl/ShaderModuleGL.cpp
+++ b/src/dawn_native/opengl/ShaderModuleGL.cpp
@@ -150,6 +150,21 @@
} else {
spirv = GetSpirv();
}
+
+ if (GetDevice()->IsToggleEnabled(Toggle::DumpShaders)) {
+ spvtools::SpirvTools spirvTools(SPV_ENV_VULKAN_1_1);
+ std::ostringstream dumpedMsg;
+ std::string disassembly;
+ if (spirvTools.Disassemble(
+ spirv, &disassembly,
+ SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES | SPV_BINARY_TO_TEXT_OPTION_INDENT)) {
+ dumpedMsg << "/* Dumped generated SPIRV disassembly */" << std::endl << disassembly;
+ } else {
+ dumpedMsg << "/* Failed to disassemble generated SPIRV */";
+ }
+ GetDevice()->EmitLog(WGPULoggingType_Info, dumpedMsg.str().c_str());
+ }
+
spirv_cross::CompilerGLSL compiler(std::move(spirv));
compiler.set_common_options(options);
compiler.set_entry_point(entryPointName, ShaderStageToExecutionModel(stage));
@@ -234,7 +249,16 @@
}
}
- return compiler.compile();
+ std::string glsl = compiler.compile();
+
+ if (GetDevice()->IsToggleEnabled(Toggle::DumpShaders)) {
+ std::ostringstream dumpedMsg;
+ dumpedMsg << "/* Dumped generated GLSL */" << std::endl << glsl;
+
+ GetDevice()->EmitLog(WGPULoggingType_Info, dumpedMsg.str().c_str());
+ }
+
+ return glsl;
}
}} // namespace dawn_native::opengl
diff --git a/src/dawn_native/vulkan/ShaderModuleVk.cpp b/src/dawn_native/vulkan/ShaderModuleVk.cpp
index 0144eef..98df441 100644
--- a/src/dawn_native/vulkan/ShaderModuleVk.cpp
+++ b/src/dawn_native/vulkan/ShaderModuleVk.cpp
@@ -226,6 +226,20 @@
std::vector<uint32_t> spirv = result.spirv;
+ if (GetDevice()->IsToggleEnabled(Toggle::DumpShaders)) {
+ spvtools::SpirvTools spirvTools(SPV_ENV_VULKAN_1_1);
+ std::ostringstream dumpedMsg;
+ std::string disassembly;
+ if (spirvTools.Disassemble(
+ result.spirv, &disassembly,
+ SPV_BINARY_TO_TEXT_OPTION_FRIENDLY_NAMES | SPV_BINARY_TO_TEXT_OPTION_INDENT)) {
+ dumpedMsg << "/* Dumped generated SPIRV disassembly */" << std::endl << disassembly;
+ } else {
+ dumpedMsg << "/* Failed to disassemble generated SPIRV */";
+ }
+ GetDevice()->EmitLog(WGPULoggingType_Info, dumpedMsg.str().c_str());
+ }
+
// Don't save the transformedParseResult but just create a VkShaderModule
VkShaderModuleCreateInfo createInfo;
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;