[msl] Add polyfill for textureSampleCompareLevel
Add MSL member function definitions for `sample_compare()` with
explicit LOD.
The WGSL function does not actually take a LOD argument and implicitly
samples from level 0, so we have to insert a new argument for this
one.
Bug: 42251016
Change-Id: I4e25b327f9629344f33131d142bad202aa106255
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/193661
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
index 50be548..c998df3 100644
--- a/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureSampleCompareLevel/2ad2b1.wgsl.expected.ir.msl
@@ -1,49 +1,43 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+ depth2d<float, access::sample> arg_0;
+ sampler arg_1;
+ device float* prevent_dce;
+};
+struct VertexOutput {
+ float4 pos;
+ float prevent_dce;
+};
+struct vertex_main_outputs {
+ float4 VertexOutput_pos [[position]];
+ float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
+};
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: { # root
- %arg_0:ptr<handle, texture_depth_2d, read> = var @binding_point(1, 0)
- %arg_1:ptr<handle, sampler_comparison, read> = var @binding_point(1, 1)
- %prevent_dce:ptr<storage, f32, read_write> = var @binding_point(2, 0)
+float textureSampleCompareLevel_2ad2b1(tint_module_vars_struct tint_module_vars) {
+ float2 arg_2 = float2(1.0f);
+ float arg_3 = 1.0f;
+ float2 const v = arg_2;
+ float const v_1 = arg_3;
+ float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, v, v_1, level(0u));
+ return res;
}
-
-%textureSampleCompareLevel_2ad2b1 = func():void {
- $B2: {
- %arg_2:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
- %arg_3:ptr<function, f32, read_write> = var, 1.0f
- %7:texture_depth_2d = load %arg_0
- %8:sampler_comparison = load %arg_1
- %9:vec2<f32> = load %arg_2
- %10:f32 = load %arg_3
- %11:f32 = textureSampleCompareLevel %7, %8, %9, %10
- %res:ptr<function, f32, read_write> = var, %11
- %13:f32 = load %res
- store %prevent_dce, %13
- ret
- }
+fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
+ tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
+ (*tint_module_vars.prevent_dce) = textureSampleCompareLevel_2ad2b1(tint_module_vars);
}
-%vertex_main = @vertex func():vec4<f32> [@position] {
- $B3: {
- %15:void = call %textureSampleCompareLevel_2ad2b1
- ret vec4<f32>(0.0f)
- }
+kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
+ tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
+ (*tint_module_vars.prevent_dce) = textureSampleCompareLevel_2ad2b1(tint_module_vars);
}
-%fragment_main = @fragment func():void {
- $B4: {
- %17:void = call %textureSampleCompareLevel_2ad2b1
- ret
- }
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureSampleCompareLevel_2ad2b1(tint_module_vars);
+ return out;
}
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
- $B5: {
- %19:void = call %textureSampleCompareLevel_2ad2b1
- ret
- }
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+ tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+ VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+ return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
}
-
-unhandled variable address space
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************