[glsl][ir] Move robustness transform

This CL moves the robustness transform before the
`textureBuiltinFromUniform` builtin as it needs to replace the
`textureNumLevels` calls injected by robustness.

Bug: 42251044
Change-Id: Id6966bb5ccaa4fcf5f8c29571cd494080c6c6063
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/209255
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/glsl/writer/builtin_test.cc b/src/tint/lang/glsl/writer/builtin_test.cc
index 0917de0..c1ef114 100644
--- a/src/tint/lang/glsl/writer/builtin_test.cc
+++ b/src/tint/lang/glsl/writer/builtin_test.cc
@@ -877,7 +877,7 @@
 )");
 }
 
-TEST_F(GlslWriterTest, DISABLED_BuiltinTextureDimensions_2d_WithU32Lod) {
+TEST_F(GlslWriterTest, BuiltinTextureDimensions_2d_WithU32Lod) {
     auto* type = ty.Get<core::type::SampledTexture>(core::type::TextureDimension::k2d, ty.f32());
     auto* var = b.Var("v", handle, type, core::Access::kReadWrite);
     var->SetBindingPoint(0, 0);
@@ -889,10 +889,24 @@
         b.Return(func);
     });
 
-    ASSERT_TRUE(Generate()) << err_ << output_.glsl;
-    EXPECT_EQ(output_.glsl, GlslHeader() + R"(
-layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+    Options opts{};
+    opts.bindings.texture_builtins_from_uniform.ubo_bindingpoint_ordering = {{0, 0}};
+    ASSERT_TRUE(Generate(opts)) << err_ << output_.glsl;
+    EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+
+struct TintTextureUniformData {
+  uint tint_builtin_value_0;
+};
+
+layout(binding = 0, std140)
+uniform tint_symbol_1_1_ubo {
+  TintTextureUniformData tint_symbol;
+} v_1;
+uniform highp sampler2D v;
 void main() {
+  uvec2 x = uvec2(textureSize(v, int(min(3u, (v_1.tint_symbol.tint_builtin_value_0 - 1u)))));
 }
 )");
 }
diff --git a/src/tint/lang/glsl/writer/raise/raise.cc b/src/tint/lang/glsl/writer/raise/raise.cc
index aacb52f..4817271 100644
--- a/src/tint/lang/glsl/writer/raise/raise.cc
+++ b/src/tint/lang/glsl/writer/raise/raise.cc
@@ -66,6 +66,12 @@
         }                                \
     } while (false)
 
+    // Must come before TextureBuiltinsFromUniform as it may add `textureNumLevels` calls.
+    if (!options.disable_robustness) {
+        core::ir::transform::RobustnessConfig config{};
+        RUN_TRANSFORM(core::ir::transform::Robustness, module, config);
+    }
+
     // Note, this comes before binding remapper as Dawn inserts _pre-remapping_ binding information.
     // So, in order to move this later we'd need to update Dawn to send the _post-remapping_ data.
     RUN_TRANSFORM(raise::TextureBuiltinsFromUniform, module,
@@ -109,11 +115,6 @@
         RUN_TRANSFORM(core::ir::transform::ConversionPolyfill, module, conversion_polyfills);
     }
 
-    if (!options.disable_robustness) {
-        core::ir::transform::RobustnessConfig config{};
-        RUN_TRANSFORM(core::ir::transform::Robustness, module, config);
-    }
-
     RUN_TRANSFORM(core::ir::transform::MultiplanarExternalTexture, module, multiplanar_map);
 
     RUN_TRANSFORM(core::ir::transform::BlockDecoratedStructs, module);
diff --git a/src/tint/lang/glsl/writer/raise/texture_polyfill.cc b/src/tint/lang/glsl/writer/raise/texture_polyfill.cc
index 9993f30..f8b37e0 100644
--- a/src/tint/lang/glsl/writer/raise/texture_polyfill.cc
+++ b/src/tint/lang/glsl/writer/raise/texture_polyfill.cc
@@ -206,8 +206,6 @@
             case core::BuiltinFn::kTextureDimensions:
             case core::BuiltinFn::kTextureLoad:
             case core::BuiltinFn::kTextureNumLayers:
-            case core::BuiltinFn::kTextureNumLevels:
-            case core::BuiltinFn::kTextureNumSamples:
             case core::BuiltinFn::kTextureStore:
                 return {VarForValue(args[0]), nullptr};
             case core::BuiltinFn::kTextureGather: {
@@ -354,9 +352,6 @@
                         });
                         break;
                     }
-                    case core::BuiltinFn::kTextureNumLevels:
-                        // No changes needed.
-                        break;
                     default:
                         TINT_UNREACHABLE() << "unknown usage instruction for texture";
                 }