[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";
}