ShaderModule: Include extra information in shader errors

If the SPIR-V fails to validate, include the SPIR-V disassembly in the error.
If the shader fails to compile, include the shader source in the error.

Change-Id: I05f93b5dec7985c42ddf9cd14621af2a855ee640
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/37282
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index 98cdfa8..90670af 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -166,6 +166,12 @@
             });
 
             if (!spirvTools.Validate(code, codeSize)) {
+                std::string disassembly;
+                if (spirvTools.Disassemble(std::vector<uint32_t>(code, code + codeSize),
+                                           &disassembly)) {
+                    errorStream << "disassembly:" << std::endl << disassembly;
+                }
+
                 return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
             }
 
@@ -180,7 +186,9 @@
             tint::reader::wgsl::Parser parser(file);
             if (!parser.Parse()) {
                 auto err = tint::diag::Formatter{}.format(parser.diagnostics());
-                errorStream << "Parser: " << err << std::endl;
+                errorStream << "Parser: " << err << std::endl
+                            << "Shader: " << std::endl
+                            << file->content << std::endl;
                 return DAWN_VALIDATION_ERROR(errorStream.str().c_str());
             }