Add test case for tint:978
Bug: tint:978
Change-Id: I2b203e1eec53e70ab34d2063c3b49848bdacb780
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57708
Auto-Submit: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/test/bug/tint/978.wgsl b/test/bug/tint/978.wgsl
new file mode 100644
index 0000000..278655e
--- /dev/null
+++ b/test/bug/tint/978.wgsl
@@ -0,0 +1,27 @@
+
+struct FragmentInput
+{
+ [[ location( 2 ) ]] vUv : vec2<f32>;
+};
+
+struct FragmentOutput
+{
+ [[ location( 0 ) ]] color : vec4<f32>;
+};
+
+[[ binding( 5 ), group( 1 ) ]] var depthMap : texture_depth_2d;
+
+[[ binding( 3 ), group( 1 ) ]] var texSampler : sampler;
+
+
+[[stage(fragment)]]
+fn main( fIn : FragmentInput ) -> FragmentOutput
+{
+ let sample : f32 = textureSample( depthMap , texSampler, fIn.vUv );
+ let color : vec3<f32> = vec3<f32>( sample, sample, sample );
+
+ var fOut : FragmentOutput;
+ fOut.color = vec4<f32>( color, 1.0 );
+
+ return fOut;
+}
diff --git a/test/bug/tint/978.wgsl.expected.hlsl b/test/bug/tint/978.wgsl.expected.hlsl
new file mode 100644
index 0000000..79a6b07
--- /dev/null
+++ b/test/bug/tint/978.wgsl.expected.hlsl
@@ -0,0 +1,26 @@
+struct FragmentInput {
+ float2 vUv;
+};
+struct FragmentOutput {
+ float4 color;
+};
+
+Texture2D depthMap : register(t5, space1);
+SamplerState texSampler : register(s3, space1);
+
+struct tint_symbol_2 {
+ float2 vUv : TEXCOORD2;
+};
+struct tint_symbol_3 {
+ float4 color : SV_Target0;
+};
+
+tint_symbol_3 main(tint_symbol_2 tint_symbol_1) {
+ const FragmentInput fIn = {tint_symbol_1.vUv};
+ const float tint_symbol = depthMap.Sample(texSampler, fIn.vUv).x;
+ const float3 color = float3(tint_symbol, tint_symbol, tint_symbol);
+ FragmentOutput fOut = (FragmentOutput)0;
+ fOut.color = float4(color, 1.0f);
+ const tint_symbol_3 tint_symbol_4 = {fOut.color};
+ return tint_symbol_4;
+}
diff --git a/test/bug/tint/978.wgsl.expected.msl b/test/bug/tint/978.wgsl.expected.msl
new file mode 100644
index 0000000..bf1aaac
--- /dev/null
+++ b/test/bug/tint/978.wgsl.expected.msl
@@ -0,0 +1,26 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct FragmentInput {
+ float2 vUv;
+};
+struct FragmentOutput {
+ float4 color;
+};
+struct tint_symbol_2 {
+ float2 vUv [[user(locn2)]];
+};
+struct tint_symbol_3 {
+ float4 color [[color(0)]];
+};
+
+fragment tint_symbol_3 tint_symbol(depth2d<float, access::sample> tint_symbol_5 [[texture(5)]], sampler tint_symbol_6 [[sampler(3)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
+ FragmentInput const fIn = {.vUv=tint_symbol_1.vUv};
+ float const sample = tint_symbol_5.sample(tint_symbol_6, fIn.vUv);
+ float3 const color = float3(sample, sample, sample);
+ FragmentOutput fOut = {};
+ fOut.color = float4(color, 1.0f);
+ tint_symbol_3 const tint_symbol_4 = {.color=fOut.color};
+ return tint_symbol_4;
+}
+
diff --git a/test/bug/tint/978.wgsl.expected.spvasm b/test/bug/tint/978.wgsl.expected.spvasm
new file mode 100644
index 0000000..d9eb5b2
--- /dev/null
+++ b/test/bug/tint/978.wgsl.expected.spvasm
@@ -0,0 +1,85 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 51
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %tint_symbol %tint_symbol_3
+ OpExecutionMode %main OriginUpperLeft
+ OpName %depthMap "depthMap"
+ OpName %texSampler "texSampler"
+ OpName %tint_symbol "tint_symbol"
+ OpName %tint_symbol_3 "tint_symbol_3"
+ OpName %FragmentOutput "FragmentOutput"
+ OpMemberName %FragmentOutput 0 "color"
+ OpName %tint_symbol_4 "tint_symbol_4"
+ OpName %tint_symbol_2 "tint_symbol_2"
+ OpName %main "main"
+ OpName %FragmentInput "FragmentInput"
+ OpMemberName %FragmentInput 0 "vUv"
+ OpName %fOut "fOut"
+ OpDecorate %depthMap Binding 5
+ OpDecorate %depthMap DescriptorSet 1
+ OpDecorate %texSampler Binding 3
+ OpDecorate %texSampler DescriptorSet 1
+ OpDecorate %tint_symbol Location 2
+ OpDecorate %tint_symbol_3 Location 0
+ OpMemberDecorate %FragmentOutput 0 Offset 0
+ OpMemberDecorate %FragmentInput 0 Offset 0
+ %float = OpTypeFloat 32
+ %3 = OpTypeImage %float 2D 1 0 0 1 Unknown
+%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
+ %depthMap = OpVariable %_ptr_UniformConstant_3 UniformConstant
+ %7 = OpTypeSampler
+%_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
+ %texSampler = OpVariable %_ptr_UniformConstant_7 UniformConstant
+ %v2float = OpTypeVector %float 2
+%_ptr_Input_v2float = OpTypePointer Input %v2float
+%tint_symbol = OpVariable %_ptr_Input_v2float Input
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %14 = OpConstantNull %v4float
+%tint_symbol_3 = OpVariable %_ptr_Output_v4float Output %14
+ %void = OpTypeVoid
+%FragmentOutput = OpTypeStruct %v4float
+ %15 = OpTypeFunction %void %FragmentOutput
+ %22 = OpTypeFunction %void
+%FragmentInput = OpTypeStruct %v2float
+ %32 = OpTypeSampledImage %3
+ %v3float = OpTypeVector %float 3
+%_ptr_Function_FragmentOutput = OpTypePointer Function %FragmentOutput
+ %39 = OpConstantNull %FragmentOutput
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %float_1 = OpConstant %float 1
+%tint_symbol_4 = OpFunction %void None %15
+%tint_symbol_2 = OpFunctionParameter %FragmentOutput
+ %20 = OpLabel
+ %21 = OpCompositeExtract %v4float %tint_symbol_2 0
+ OpStore %tint_symbol_3 %21
+ OpReturn
+ OpFunctionEnd
+ %main = OpFunction %void None %22
+ %24 = OpLabel
+ %fOut = OpVariable %_ptr_Function_FragmentOutput Function %39
+ %26 = OpLoad %v2float %tint_symbol
+ %27 = OpCompositeConstruct %FragmentInput %26
+ %30 = OpLoad %7 %texSampler
+ %31 = OpLoad %3 %depthMap
+ %33 = OpSampledImage %32 %31 %30
+ %34 = OpCompositeExtract %v2float %27 0
+ %29 = OpImageSampleImplicitLod %v4float %33 %34
+ %28 = OpCompositeExtract %float %29 0
+ %36 = OpCompositeConstruct %v3float %28 %28 %28
+ %43 = OpAccessChain %_ptr_Function_v4float %fOut %uint_0
+ %44 = OpCompositeExtract %float %36 0
+ %45 = OpCompositeExtract %float %36 1
+ %46 = OpCompositeExtract %float %36 2
+ %48 = OpCompositeConstruct %v4float %44 %45 %46 %float_1
+ OpStore %43 %48
+ %50 = OpLoad %FragmentOutput %fOut
+ %49 = OpFunctionCall %void %tint_symbol_4 %50
+ OpReturn
+ OpFunctionEnd
diff --git a/test/bug/tint/978.wgsl.expected.wgsl b/test/bug/tint/978.wgsl.expected.wgsl
new file mode 100644
index 0000000..a912004
--- /dev/null
+++ b/test/bug/tint/978.wgsl.expected.wgsl
@@ -0,0 +1,22 @@
+struct FragmentInput {
+ [[location(2)]]
+ vUv : vec2<f32>;
+};
+
+struct FragmentOutput {
+ [[location(0)]]
+ color : vec4<f32>;
+};
+
+[[binding(5), group(1)]] var depthMap : texture_depth_2d;
+
+[[binding(3), group(1)]] var texSampler : sampler;
+
+[[stage(fragment)]]
+fn main(fIn : FragmentInput) -> FragmentOutput {
+ let sample : f32 = textureSample(depthMap, texSampler, fIn.vUv);
+ let color : vec3<f32> = vec3<f32>(sample, sample, sample);
+ var fOut : FragmentOutput;
+ fOut.color = vec4<f32>(color, 1.0);
+ return fOut;
+}