Emit validation errors after outputing result.

This Cl removes the SPIR-V validation errors to emit after the desired
output format. This means a SPVASM output will have the error at the
bottom making it more visible.

Change-Id: I010f45ea4f35b2f5489749a49492c3d860410e8a
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/30080
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/samples/main.cc b/samples/main.cc
index 8e52ced..886171f 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -569,13 +569,16 @@
 
 #if TINT_BUILD_SPV_WRITER
   bool dawn_validation_failed = false;
+  std::ostringstream stream;
+
   if (options.dawn_validation) {
     // Use Vulkan 1.1, since this is what Tint, internally, uses.
     spvtools::SpirvTools tools(SPV_ENV_VULKAN_1_1);
-    tools.SetMessageConsumer([](spv_message_level_t, const char*,
-                                const spv_position_t& pos, const char* msg) {
-      std::cerr << (pos.line + 1) << ":" << (pos.column + 1) << ": " << msg
-                << std::endl;
+    tools.SetMessageConsumer([&stream](spv_message_level_t, const char*,
+                                       const spv_position_t& pos,
+                                       const char* msg) {
+      stream << (pos.line + 1) << ":" << (pos.column + 1) << ": " << msg
+             << std::endl;
     });
     auto* w = static_cast<tint::writer::spirv::Generator*>(writer.get());
     if (!tools.Validate(w->result().data(), w->result().size(),
@@ -598,6 +601,8 @@
     }
   }
   if (dawn_validation_failed) {
+    std::cerr << std::endl << std::endl << "Validation Failure:" << std::endl;
+    std::cerr << stream.str();
     return 1;
   }
 #endif  // TINT_BUILD_SPV_WRITER