Move `clamp_frag_depth` transformer to backend.

This CL moves the `clamp_frag_depth` transform to be controlled by the
SPIR-V backend.

Bug: tint:1855 chromium:1421379
Change-Id: Ia439d812d4baf35d4d4955595938a2bd5e647167
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/123560
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/include/tint/tint.h b/include/tint/tint.h
index afd91f8..0a0c027 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -27,7 +27,6 @@
 #include "src/tint/reader/reader.h"
 #include "src/tint/text/unicode.h"
 #include "src/tint/transform/binding_remapper.h"
-#include "src/tint/transform/clamp_frag_depth.h"
 #include "src/tint/transform/first_index_offset.h"
 #include "src/tint/transform/manager.h"
 #include "src/tint/transform/multiplanar_external_texture.h"
diff --git a/src/dawn/native/vulkan/ShaderModuleVk.cpp b/src/dawn/native/vulkan/ShaderModuleVk.cpp
index d77754a..2467aa3 100644
--- a/src/dawn/native/vulkan/ShaderModuleVk.cpp
+++ b/src/dawn/native/vulkan/ShaderModuleVk.cpp
@@ -305,10 +305,6 @@
                     r.newBindingsMap);
             }
 
-            if (r.clampFragDepth) {
-                transformManager.Add<tint::transform::ClampFragDepth>();
-            }
-
             tint::Program program;
             tint::transform::DataMap transformOutputs;
             {
@@ -340,6 +336,7 @@
             }
 
             tint::writer::spirv::Options options;
+            options.clamp_frag_depth = r.clampFragDepth;
             options.disable_robustness = !r.isRobustnessEnabled;
             options.emit_vertex_point_size = true;
             options.disable_workgroup_init = r.disableWorkgroupInit;
diff --git a/src/tint/writer/spirv/generator.h b/src/tint/writer/spirv/generator.h
index 5ad9057..f6d2268 100644
--- a/src/tint/writer/spirv/generator.h
+++ b/src/tint/writer/spirv/generator.h
@@ -46,6 +46,9 @@
     /// Set to `true` to disable workgroup memory zero initialization
     bool disable_workgroup_init = false;
 
+    /// Set to `true` to clamp frag depth
+    bool clamp_frag_depth = false;
+
     /// Options used in the binding mappings for external textures
     ExternalTextureOptions external_texture_options = {};
 
diff --git a/src/tint/writer/spirv/generator_impl.cc b/src/tint/writer/spirv/generator_impl.cc
index f3bbaf3..1986f83 100644
--- a/src/tint/writer/spirv/generator_impl.cc
+++ b/src/tint/writer/spirv/generator_impl.cc
@@ -21,6 +21,7 @@
 #include "src/tint/transform/add_empty_entry_point.h"
 #include "src/tint/transform/builtin_polyfill.h"
 #include "src/tint/transform/canonicalize_entry_point_io.h"
+#include "src/tint/transform/clamp_frag_depth.h"
 #include "src/tint/transform/demote_to_helper.h"
 #include "src/tint/transform/direct_variable_access.h"
 #include "src/tint/transform/disable_uniformity_analysis.h"
@@ -49,6 +50,10 @@
     transform::Manager manager;
     transform::DataMap data;
 
+    if (options.clamp_frag_depth) {
+        manager.Add<tint::transform::ClampFragDepth>();
+    }
+
     manager.Add<transform::DisableUniformityAnalysis>();
 
     // ExpandCompoundAssignment must come before BuiltinPolyfill