writer/hlsl: Swizzle depth texture intrinsics HLSL usually implicitly casts a vector down to a scalar, but this breaks when passing the vector to RWByteAddressBuffer.Store (for DXC only). Fixed: tint:827 Change-Id: I67d0bc6e9185de3d434a7aaeb575d83850111ec5 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/55760 Auto-Submit: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: David Neto <dneto@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc index d472bd5..b2b4c50 100644 --- a/src/writer/hlsl/generator_impl.cc +++ b/src/writer/hlsl/generator_impl.cc
@@ -1561,6 +1561,7 @@ return false; bool pack_mip_in_coords = false; + uint32_t hlsl_ret_width = 4u; switch (intrinsic->Type()) { case sem::IntrinsicType::kTextureSample: @@ -1577,9 +1578,11 @@ break; case sem::IntrinsicType::kTextureSampleCompare: out << ".SampleCmp("; + hlsl_ret_width = 1; break; case sem::IntrinsicType::kTextureSampleCompareLevel: out << ".SampleCmpLevelZero("; + hlsl_ret_width = 1; break; case sem::IntrinsicType::kTextureLoad: out << ".Load("; @@ -1630,28 +1633,52 @@ } } else if (pack_mip_in_coords) { // Mip level needs to be appended to the coordinates, but is always zero. - if (!emit_vector_appended_with_i32_zero(param_coords)) + if (!emit_vector_appended_with_i32_zero(param_coords)) { return false; + } } else { - if (!EmitExpression(pre, out, param_coords)) + if (!EmitExpression(pre, out, param_coords)) { return false; + } } for (auto usage : {Usage::kDepthRef, Usage::kBias, Usage::kLevel, Usage::kDdx, Usage::kDdy, Usage::kSampleIndex, Usage::kOffset}) { if (auto* e = arg(usage)) { out << ", "; - if (!EmitExpression(pre, out, e)) + if (!EmitExpression(pre, out, e)) { return false; + } } } if (intrinsic->Type() == sem::IntrinsicType::kTextureStore) { out << "] = "; - if (!EmitExpression(pre, out, arg(Usage::kValue))) + if (!EmitExpression(pre, out, arg(Usage::kValue))) { return false; + } } else { out << ")"; + + // If the intrinsic return type does not match the number of elements of the + // HLSL intrinsic, we need to swizzle the expression to generate the correct + // number of components. + uint32_t wgsl_ret_width = 1; + if (auto* vec = intrinsic->ReturnType()->As<sem::Vector>()) { + wgsl_ret_width = vec->size(); + } + if (wgsl_ret_width < hlsl_ret_width) { + out << "."; + for (uint32_t i = 0; i < wgsl_ret_width; i++) { + out << "xyz"[i]; + } + } + if (wgsl_ret_width > hlsl_ret_width) { + TINT_ICE(diagnostics_) << "WGSL return width (" << wgsl_ret_width + << ") is wider than HLSL return width (" + << hlsl_ret_width << ") for " << intrinsic->Type(); + return false; + } } return true;
diff --git a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc index e35e503..82475fc 100644 --- a/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc +++ b/src/writer/hlsl/generator_impl_intrinsic_texture_test.cc
@@ -44,7 +44,7 @@ R"(int tint_tmp; tint_symbol.GetDimensions(tint_tmp); )", - "tint_tmp", + "tint_tmp;", }; case ValidTextureOverload::kDimensions2d: case ValidTextureOverload::kDimensionsDepth2d: @@ -54,14 +54,14 @@ R"(int2 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y); )", - "tint_tmp", + "tint_tmp;", }; case ValidTextureOverload::kDimensionsMultisampled2d: return { R"(int3 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kDimensions2dArray: @@ -72,7 +72,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kDimensions3d: case ValidTextureOverload::kDimensionsStorageRO3d: @@ -81,7 +81,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp", + "tint_tmp;", }; case ValidTextureOverload::kDimensionsCube: case ValidTextureOverload::kDimensionsDepthCube: @@ -89,7 +89,7 @@ R"(int2 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y); )", - "tint_tmp", + "tint_tmp;", }; case ValidTextureOverload::kDimensionsCubeArray: case ValidTextureOverload::kDimensionsDepthCubeArray: @@ -97,7 +97,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kDimensions2dLevel: case ValidTextureOverload::kDimensionsDepth2dLevel: @@ -105,7 +105,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kDimensions2dArrayLevel: case ValidTextureOverload::kDimensionsDepth2dArrayLevel: @@ -113,14 +113,14 @@ R"(int4 tint_tmp; tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kDimensions3dLevel: return { R"(int4 tint_tmp; tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w); )", - "tint_tmp.xyz", + "tint_tmp.xyz;", }; case ValidTextureOverload::kDimensionsCubeLevel: case ValidTextureOverload::kDimensionsDepthCubeLevel: @@ -128,7 +128,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kDimensionsCubeArrayLevel: case ValidTextureOverload::kDimensionsDepthCubeArrayLevel: @@ -136,7 +136,7 @@ R"(int4 tint_tmp; tint_symbol.GetDimensions(1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w); )", - "tint_tmp.xy", + "tint_tmp.xy;", }; case ValidTextureOverload::kNumLayers2dArray: case ValidTextureOverload::kNumLayersDepth2dArray: @@ -147,7 +147,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.z", + "tint_tmp.z;", }; case ValidTextureOverload::kNumLevels2d: case ValidTextureOverload::kNumLevelsCube: @@ -157,7 +157,7 @@ R"(int3 tint_tmp; tint_symbol.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.z", + "tint_tmp.z;", }; case ValidTextureOverload::kNumLevels2dArray: case ValidTextureOverload::kNumLevels3d: @@ -168,165 +168,165 @@ R"(int4 tint_tmp; tint_symbol.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w); )", - "tint_tmp.w", + "tint_tmp.w;", }; case ValidTextureOverload::kNumSamplesMultisampled2d: return { R"(int3 tint_tmp; tint_symbol.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z); )", - "tint_tmp.z", + "tint_tmp.z;", }; case ValidTextureOverload::kSample1dF32: - return R"(tint_symbol.Sample(tint_symbol_1, 1.0f))"; + return R"(tint_symbol.Sample(tint_symbol_1, 1.0f);)"; case ValidTextureOverload::kSample2dF32: - return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f));)"; case ValidTextureOverload::kSample2dOffsetF32: - return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f), int2(3, 4)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f), int2(3, 4));)"; case ValidTextureOverload::kSample2dArrayF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3))))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)));)"; case ValidTextureOverload::kSample2dArrayOffsetF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)), int2(4, 5)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)), int2(4, 5));)"; case ValidTextureOverload::kSample3dF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f));)"; case ValidTextureOverload::kSample3dOffsetF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), int3(4, 5, 6));)"; case ValidTextureOverload::kSampleCubeF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f));)"; case ValidTextureOverload::kSampleCubeArrayF32: - return R"(tint_symbol.Sample(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4))))"; + return R"(tint_symbol.Sample(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)));)"; case ValidTextureOverload::kSampleDepth2dF32: - return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f)).x;)"; case ValidTextureOverload::kSampleDepth2dOffsetF32: - return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f), int2(3, 4)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float2(1.0f, 2.0f), int2(3, 4)).x;)"; case ValidTextureOverload::kSampleDepth2dArrayF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3))))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3))).x;)"; case ValidTextureOverload::kSampleDepth2dArrayOffsetF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)), int2(4, 5)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, float(3)), int2(4, 5)).x;)"; case ValidTextureOverload::kSampleDepthCubeF32: - return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)))"; + return R"(tint_symbol.Sample(tint_symbol_1, float3(1.0f, 2.0f, 3.0f)).x;)"; case ValidTextureOverload::kSampleDepthCubeArrayF32: - return R"(tint_symbol.Sample(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4))))"; + return R"(tint_symbol.Sample(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4))).x;)"; case ValidTextureOverload::kSampleBias2dF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float2(1.0f, 2.0f), 3.0f);)"; case ValidTextureOverload::kSampleBias2dOffsetF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5));)"; case ValidTextureOverload::kSampleBias2dArrayF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f);)"; case ValidTextureOverload::kSampleBias2dArrayOffsetF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6));)"; case ValidTextureOverload::kSampleBias3dF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f);)"; case ValidTextureOverload::kSampleBias3dOffsetF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7));)"; case ValidTextureOverload::kSampleBiasCubeF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f);)"; case ValidTextureOverload::kSampleBiasCubeArrayF32: - return R"(tint_symbol.SampleBias(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f))"; + return R"(tint_symbol.SampleBias(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(3)), 4.0f);)"; case ValidTextureOverload::kSampleLevel2dF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3.0f);)"; case ValidTextureOverload::kSampleLevel2dOffsetF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5));)"; case ValidTextureOverload::kSampleLevel2dArrayF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f);)"; case ValidTextureOverload::kSampleLevel2dArrayOffsetF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6)))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4.0f, int2(5, 6));)"; case ValidTextureOverload::kSampleLevel3dF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f);)"; case ValidTextureOverload::kSampleLevel3dOffsetF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7)))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f, int3(5, 6, 7));)"; case ValidTextureOverload::kSampleLevelCubeF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f);)"; case ValidTextureOverload::kSampleLevelCubeArrayF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f);)"; case ValidTextureOverload::kSampleLevelDepth2dF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3).x;)"; case ValidTextureOverload::kSampleLevelDepth2dOffsetF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3, int2(4, 5)))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float2(1.0f, 2.0f), 3, int2(4, 5)).x;)"; case ValidTextureOverload::kSampleLevelDepth2dArrayF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4).x;)"; case ValidTextureOverload::kSampleLevelDepth2dArrayOffsetF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, float(3)), 4, int2(5, 6)).x;)"; case ValidTextureOverload::kSampleLevelDepthCubeF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4).x;)"; case ValidTextureOverload::kSampleLevelDepthCubeArrayF32: - return R"(tint_symbol.SampleLevel(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5))"; + return R"(tint_symbol.SampleLevel(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5).x;)"; case ValidTextureOverload::kSampleGrad2dF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f));)"; case ValidTextureOverload::kSampleGrad2dOffsetF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float2(1.0f, 2.0f), float2(3.0f, 4.0f), float2(5.0f, 6.0f), int2(7, 8));)"; case ValidTextureOverload::kSampleGrad2dArrayF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f));)"; case ValidTextureOverload::kSampleGrad2dArrayOffsetF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f), int2(8, 9)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, float(3)), float2(4.0f, 5.0f), float2(6.0f, 7.0f), int2(8, 9));)"; case ValidTextureOverload::kSampleGrad3dF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));)"; case ValidTextureOverload::kSampleGrad3dOffsetF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), int3(10, 11, 12)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f), int3(10, 11, 12));)"; case ValidTextureOverload::kSampleGradCubeF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));)"; case ValidTextureOverload::kSampleGradCubeArrayF32: - return R"(tint_symbol.SampleGrad(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), float3(5.0f, 6.0f, 7.0f), float3(8.0f, 9.0f, 10.0f)))"; + return R"(tint_symbol.SampleGrad(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), float3(5.0f, 6.0f, 7.0f), float3(8.0f, 9.0f, 10.0f));)"; case ValidTextureOverload::kSampleCompareDepth2dF32: - return R"(tint_symbol.SampleCmp(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))"; + return R"(tint_symbol.SampleCmp(tint_symbol_1, float2(1.0f, 2.0f), 3.0f);)"; case ValidTextureOverload::kSampleCompareDepth2dOffsetF32: - return R"(tint_symbol.SampleCmp(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))"; + return R"(tint_symbol.SampleCmp(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5));)"; case ValidTextureOverload::kSampleCompareDepth2dArrayF32: - return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))"; + return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f);)"; case ValidTextureOverload::kSampleCompareDepth2dArrayOffsetF32: - return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))"; + return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6));)"; case ValidTextureOverload::kSampleCompareDepthCubeF32: - return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))"; + return R"(tint_symbol.SampleCmp(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f);)"; case ValidTextureOverload::kSampleCompareDepthCubeArrayF32: - return R"(tint_symbol.SampleCmp(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))"; + return R"(tint_symbol.SampleCmp(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f);)"; case ValidTextureOverload::kSampleCompareLevelDepth2dF32: - return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f))"; + return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f);)"; case ValidTextureOverload::kSampleCompareLevelDepth2dOffsetF32: - return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5)))"; + return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float2(1.0f, 2.0f), 3.0f, int2(4, 5));)"; case ValidTextureOverload::kSampleCompareLevelDepth2dArrayF32: - return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f))"; + return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f);)"; case ValidTextureOverload::kSampleCompareLevelDepth2dArrayOffsetF32: - return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6)))"; + return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, float(4)), 3.0f, int2(5, 6));)"; case ValidTextureOverload::kSampleCompareLevelDepthCubeF32: - return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f))"; + return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float3(1.0f, 2.0f, 3.0f), 4.0f);)"; case ValidTextureOverload::kSampleCompareLevelDepthCubeArrayF32: - return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f))"; + return R"(tint_symbol.SampleCmpLevelZero(tint_symbol_1, float4(1.0f, 2.0f, 3.0f, float(4)), 5.0f);)"; case ValidTextureOverload::kLoad1dLevelF32: - return R"(tint_symbol.Load(int2(1, 0), 3))"; + return R"(tint_symbol.Load(int2(1, 0), 3);)"; case ValidTextureOverload::kLoad1dLevelU32: - return R"(tint_symbol.Load(int2(1, 0), 3))"; + return R"(tint_symbol.Load(int2(1, 0), 3);)"; case ValidTextureOverload::kLoad1dLevelI32: - return R"(tint_symbol.Load(int2(1, 0), 3))"; + return R"(tint_symbol.Load(int2(1, 0), 3);)"; case ValidTextureOverload::kLoad2dLevelF32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3);)"; case ValidTextureOverload::kLoad2dLevelU32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3);)"; case ValidTextureOverload::kLoad2dLevelI32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3);)"; case ValidTextureOverload::kLoad2dArrayLevelF32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4);)"; case ValidTextureOverload::kLoad2dArrayLevelU32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4);)"; case ValidTextureOverload::kLoad2dArrayLevelI32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4);)"; case ValidTextureOverload::kLoad3dLevelF32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4);)"; case ValidTextureOverload::kLoad3dLevelU32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4);)"; case ValidTextureOverload::kLoad3dLevelI32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4);)"; case ValidTextureOverload::kLoadMultisampled2dF32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3);)"; case ValidTextureOverload::kLoadMultisampled2dU32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3);)"; case ValidTextureOverload::kLoadMultisampled2dI32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3);)"; case ValidTextureOverload::kLoadDepth2dLevelF32: - return R"(tint_symbol.Load(int3(1, 2, 0), 3))"; + return R"(tint_symbol.Load(int3(1, 2, 0), 3).x;)"; case ValidTextureOverload::kLoadDepth2dArrayLevelF32: - return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0), 4).x;)"; case ValidTextureOverload::kLoadStorageRO1dRgba32float: - return R"(tint_symbol.Load(int2(1, 0)))"; + return R"(tint_symbol.Load(int2(1, 0));)"; case ValidTextureOverload::kLoadStorageRO2dRgba8unorm: case ValidTextureOverload::kLoadStorageRO2dRgba8snorm: case ValidTextureOverload::kLoadStorageRO2dRgba8uint: @@ -343,19 +343,19 @@ case ValidTextureOverload::kLoadStorageRO2dRgba32uint: case ValidTextureOverload::kLoadStorageRO2dRgba32sint: case ValidTextureOverload::kLoadStorageRO2dRgba32float: - return R"(tint_symbol.Load(int3(1, 2, 0)))"; + return R"(tint_symbol.Load(int3(1, 2, 0));)"; case ValidTextureOverload::kLoadStorageRO2dArrayRgba32float: - return R"(tint_symbol.Load(int4(1, 2, 3, 0)))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0));)"; case ValidTextureOverload::kLoadStorageRO3dRgba32float: - return R"(tint_symbol.Load(int4(1, 2, 3, 0)))"; + return R"(tint_symbol.Load(int4(1, 2, 3, 0));)"; case ValidTextureOverload::kStoreWO1dRgba32float: - return R"(tint_symbol[1] = float4(2.0f, 3.0f, 4.0f, 5.0f))"; + return R"(tint_symbol[1] = float4(2.0f, 3.0f, 4.0f, 5.0f);)"; case ValidTextureOverload::kStoreWO2dRgba32float: - return R"(tint_symbol[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f))"; + return R"(tint_symbol[int2(1, 2)] = float4(3.0f, 4.0f, 5.0f, 6.0f);)"; case ValidTextureOverload::kStoreWO2dArrayRgba32float: - return R"(tint_symbol[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))"; + return R"(tint_symbol[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f);)"; case ValidTextureOverload::kStoreWO3dRgba32float: - return R"(tint_symbol[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f))"; + return R"(tint_symbol[int3(1, 2, 3)] = float4(4.0f, 5.0f, 6.0f, 7.0f);)"; } return "<unmatched texture overload>"; } // NOLINT - Ignore the length of this function
diff --git a/test/bug/tint/827.wgsl.expected.hlsl b/test/bug/tint/827.wgsl.expected.hlsl index bb53157..b3581d6 100644 --- a/test/bug/tint/827.wgsl.expected.hlsl +++ b/test/bug/tint/827.wgsl.expected.hlsl
@@ -9,6 +9,6 @@ [numthreads(1, 1, 1)] void main(tint_symbol_1 tint_symbol) { const uint3 GlobalInvocationId = tint_symbol.GlobalInvocationId; - result.Store((4u * ((GlobalInvocationId.y * width) + GlobalInvocationId.x)), asuint(tex.Load(int3(int(GlobalInvocationId.x), int(GlobalInvocationId.y), 0), 0))); + result.Store((4u * ((GlobalInvocationId.y * width) + GlobalInvocationId.x)), asuint(tex.Load(int3(int(GlobalInvocationId.x), int(GlobalInvocationId.y), 0), 0).x)); return; }
diff --git a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.hlsl b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.hlsl index 2f11c73..b4d5221 100644 --- a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.hlsl
@@ -1,7 +1,7 @@ Texture2D arg_0 : register(t0, space1); void textureLoad_19cf87() { - float res = arg_0.Load(int3(0, 0, 0), 1); + float res = arg_0.Load(int3(0, 0, 0), 1).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.hlsl b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.hlsl index d41bf8b..e513119 100644 --- a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.hlsl
@@ -1,7 +1,7 @@ Texture2DArray arg_0 : register(t0, space1); void textureLoad_9b2667() { - float res = arg_0.Load(int4(0, 0, 1, 0), 1); + float res = arg_0.Load(int4(0, 0, 1, 0), 1).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.hlsl b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.hlsl index 1804b92..eed7099 100644 --- a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSample_38bbb9() { - float res = arg_0.Sample(arg_1, float2(0.0f, 0.0f)); + float res = arg_0.Sample(arg_1, float2(0.0f, 0.0f)).x; } void fragment_main() {
diff --git a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.hlsl b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.hlsl index b47fa1a..6f582e3 100644 --- a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSample_667d76() { - float res = arg_0.Sample(arg_1, float2(0.0f, 0.0f), int2(0, 0)); + float res = arg_0.Sample(arg_1, float2(0.0f, 0.0f), int2(0, 0)).x; } void fragment_main() {
diff --git a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.hlsl b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.hlsl index 4a3fcf2..b316713 100644 --- a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSample_7e9ffd() { - float res = arg_0.Sample(arg_1, float3(0.0f, 0.0f, float(1))); + float res = arg_0.Sample(arg_1, float3(0.0f, 0.0f, float(1))).x; } void fragment_main() {
diff --git a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.hlsl b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.hlsl index 2e1b623..a47e848 100644 --- a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSample_8522e7() { - float res = arg_0.Sample(arg_1, float3(0.0f, 0.0f, float(1)), int2(0, 0)); + float res = arg_0.Sample(arg_1, float3(0.0f, 0.0f, float(1)), int2(0, 0)).x; } void fragment_main() {
diff --git a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.hlsl b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.hlsl index d201d1f..c2eee5a 100644 --- a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSample_c2f4e8() { - float res = arg_0.Sample(arg_1, float4(0.0f, 0.0f, 0.0f, float(1))); + float res = arg_0.Sample(arg_1, float4(0.0f, 0.0f, 0.0f, float(1))).x; } void fragment_main() {
diff --git a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.hlsl b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.hlsl index 730837f..f01c286 100644 --- a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSample_ea7030() { - float res = arg_0.Sample(arg_1, float3(0.0f, 0.0f, 0.0f)); + float res = arg_0.Sample(arg_1, float3(0.0f, 0.0f, 0.0f)).x; } void fragment_main() {
diff --git a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.hlsl b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.hlsl index 13c3f11..91b31b0 100644 --- a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSampleLevel_02be59() { - float res = arg_0.SampleLevel(arg_1, float2(0.0f, 0.0f), 1); + float res = arg_0.SampleLevel(arg_1, float2(0.0f, 0.0f), 1).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.hlsl b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.hlsl index a2b0752..b74acd6 100644 --- a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSampleLevel_1b0291() { - float res = arg_0.SampleLevel(arg_1, float3(0.0f, 0.0f, 0.0f), 1); + float res = arg_0.SampleLevel(arg_1, float3(0.0f, 0.0f, 0.0f), 1).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.hlsl b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.hlsl index 7a18e0c..ec16c2a 100644 --- a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSampleLevel_1bf73e() { - float res = arg_0.SampleLevel(arg_1, float3(0.0f, 0.0f, float(1)), 1); + float res = arg_0.SampleLevel(arg_1, float3(0.0f, 0.0f, float(1)), 1).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.hlsl b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.hlsl index 3e841fc..2584306 100644 --- a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSampleLevel_47daa4() { - float res = arg_0.SampleLevel(arg_1, float2(0.0f, 0.0f), 1, int2(0, 0)); + float res = arg_0.SampleLevel(arg_1, float2(0.0f, 0.0f), 1, int2(0, 0)).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.hlsl b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.hlsl index 6cfb1d5..f9cabec 100644 --- a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSampleLevel_ae5e39() { - float res = arg_0.SampleLevel(arg_1, float4(0.0f, 0.0f, 0.0f, float(1)), 1); + float res = arg_0.SampleLevel(arg_1, float4(0.0f, 0.0f, 0.0f, float(1)), 1).x; } struct tint_symbol {
diff --git a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.hlsl b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.hlsl index b48b267..9a7073d 100644 --- a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.hlsl +++ b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.hlsl
@@ -2,7 +2,7 @@ SamplerState arg_1 : register(s1, space1); void textureSampleLevel_ba93b3() { - float res = arg_0.SampleLevel(arg_1, float3(0.0f, 0.0f, float(1)), 1, int2(0, 0)); + float res = arg_0.SampleLevel(arg_1, float3(0.0f, 0.0f, float(1)), 1, int2(0, 0)).x; } struct tint_symbol {