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..b2b4c502 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 {