diff --git a/test/bug/tint/978.wgsl b/test/bug/tint/978.wgsl new file mode 100644 index 0000000000..278655e674 --- /dev/null +++ b/test/bug/tint/978.wgsl @@ -0,0 +1,27 @@ + +struct FragmentInput +{ + [[ location( 2 ) ]] vUv : vec2; +}; + +struct FragmentOutput +{ + [[ location( 0 ) ]] color : vec4; +}; + +[[ 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 = vec3( sample, sample, sample ); + + var fOut : FragmentOutput; + fOut.color = vec4( 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 0000000000..79a6b078fd --- /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 0000000000..bf1aaac1b2 --- /dev/null +++ b/test/bug/tint/978.wgsl.expected.msl @@ -0,0 +1,26 @@ +#include + +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 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 0000000000..d9eb5b2d45 --- /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 0000000000..a912004334 --- /dev/null +++ b/test/bug/tint/978.wgsl.expected.wgsl @@ -0,0 +1,22 @@ +struct FragmentInput { + [[location(2)]] + vUv : vec2; +}; + +struct FragmentOutput { + [[location(0)]] + color : vec4; +}; + +[[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 = vec3(sample, sample, sample); + var fOut : FragmentOutput; + fOut.color = vec4(color, 1.0); + return fOut; +}