Add a Unsafe SPIR-V generate call.

Currently Dawn may use the tint generator or the SPIRV-Cross generator.
In the case of SPIRV-Cross, we need to generate the SPIR-V with the
original names otherwise SPIRV-Cross won't be able to match up the entry
point name with the names in the shader.

Change-Id: Ica473030009b282fee352f2d1c1acc93f1db592c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/37222
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/writer/spirv/generator.cc b/src/writer/spirv/generator.cc
index 41dfb07..190af5f 100644
--- a/src/writer/spirv/generator.cc
+++ b/src/writer/spirv/generator.cc
@@ -51,6 +51,22 @@
   return true;
 }
 
+bool Generator::GenerateUnsafe() {
+  auto unsafe_namer = std::make_unique<UnsafeNamer>(module_);
+  builder_ = std::make_unique<Builder>(module_, unsafe_namer.get());
+
+  if (!builder_->Build()) {
+    set_error(builder_->error());
+    return false;
+  }
+
+  writer_->WriteHeader(builder_->id_bound());
+  writer_->WriteBuilder(builder_.get());
+
+  builder_ = std::make_unique<Builder>(module_, namer_.get());
+  return true;
+}
+
 bool Generator::GenerateEntryPoint(ast::PipelineStage, const std::string&) {
   return false;
 }
diff --git a/src/writer/spirv/generator.h b/src/writer/spirv/generator.h
index d84d753..7f73d49 100644
--- a/src/writer/spirv/generator.h
+++ b/src/writer/spirv/generator.h
@@ -48,6 +48,11 @@
   /// @returns true on successful generation; false otherwise
   bool Generate() override;
 
+  /// Generates the result data
+  /// DO NOT USE. Temporary fix for Dawn usage of SPRIV-Cross
+  /// @returns true on successful generation; false otherwise
+  bool GenerateUnsafe();
+
   /// Converts a single entry point
   /// @param stage the pipeline stage
   /// @param name the entry point name