Delete Single-Plane External Texture Transform

The multiplanar external texture transform has been integrated into
Dawn, which means we have no use for the single plane transform - so it
should be deleted.

Bug: dawn:1082
Change-Id: Id8977d03839b76c90ae6e70400d048c13fbe85f4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/80120
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Brandon1 Jones <brandon1.jones@intel.com>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 98ad682..53f557a 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -450,8 +450,6 @@
     "transform/decompose_strided_array.h",
     "transform/decompose_strided_matrix.cc",
     "transform/decompose_strided_matrix.h",
-    "transform/external_texture_transform.cc",
-    "transform/external_texture_transform.h",
     "transform/first_index_offset.cc",
     "transform/first_index_offset.h",
     "transform/fold_constants.cc",
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 1eba18f..8abbc93 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -326,8 +326,6 @@
   transform/decompose_strided_array.h
   transform/decompose_strided_matrix.cc
   transform/decompose_strided_matrix.h
-  transform/external_texture_transform.cc
-  transform/external_texture_transform.h
   transform/first_index_offset.cc
   transform/first_index_offset.h
   transform/fold_constants.cc
@@ -1015,7 +1013,6 @@
       transform/decompose_memory_access_test.cc
       transform/decompose_strided_array_test.cc
       transform/decompose_strided_matrix_test.cc
-      transform/external_texture_transform_test.cc
       transform/first_index_offset_test.cc
       transform/fold_constants_test.cc
       transform/fold_trivial_single_use_lets_test.cc
diff --git a/src/tint/transform/external_texture_transform.cc b/src/tint/transform/external_texture_transform.cc
deleted file mode 100644
index eefa4c0..0000000
--- a/src/tint/transform/external_texture_transform.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/transform/external_texture_transform.h"
-
-#include "src/tint/program_builder.h"
-#include "src/tint/sem/call.h"
-#include "src/tint/sem/variable.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::transform::ExternalTextureTransform);
-
-namespace tint {
-namespace transform {
-
-ExternalTextureTransform::ExternalTextureTransform() = default;
-ExternalTextureTransform::~ExternalTextureTransform() = default;
-
-void ExternalTextureTransform::Run(CloneContext& ctx,
-                                   const DataMap&,
-                                   DataMap&) const {
-  auto& sem = ctx.src->Sem();
-
-  // Within this transform, usages of texture_external are replaced with a
-  // texture_2d<f32>, which will allow us perform operations on a
-  // texture_external without maintaining texture_external-specific code
-  // generation paths in the backends.
-
-  // When replacing instances of texture_external with texture_2d<f32> we must
-  // also modify calls to the texture_external overloads of textureLoad and
-  // textureSampleLevel, which unlike their texture_2d<f32> overloads do not
-  // require a level parameter. To do this we identify calls to textureLoad and
-  // textureSampleLevel that use texture_external as the first parameter and add
-  // a parameter for the level (which is always 0).
-
-  // Scan the AST nodes for calls to textureLoad or textureSampleLevel.
-  for (auto* node : ctx.src->ASTNodes().Objects()) {
-    if (auto* call_expr = node->As<ast::CallExpression>()) {
-      if (auto* builtin = sem.Get(call_expr)->Target()->As<sem::Builtin>()) {
-        if (builtin->Type() == sem::BuiltinType::kTextureLoad ||
-            builtin->Type() == sem::BuiltinType::kTextureSampleLevel) {
-          // When a textureLoad or textureSampleLevel has been identified, check
-          // if the first parameter is an external texture.
-          if (auto* var =
-                  sem.Get(call_expr->args[0])->As<sem::VariableUser>()) {
-            if (var->Variable()
-                    ->Type()
-                    ->UnwrapRef()
-                    ->Is<sem::ExternalTexture>()) {
-              if (builtin->Type() == sem::BuiltinType::kTextureLoad &&
-                  call_expr->args.size() != 2) {
-                TINT_ICE(Transform, ctx.dst->Diagnostics())
-                    << "expected textureLoad call with a texture_external to "
-                       "have 2 parameters, found "
-                    << call_expr->args.size() << " parameters";
-              }
-
-              if (builtin->Type() == sem::BuiltinType::kTextureSampleLevel &&
-                  call_expr->args.size() != 3) {
-                TINT_ICE(Transform, ctx.dst->Diagnostics())
-                    << "expected textureSampleLevel call with a "
-                       "texture_external to have 3 parameters, found "
-                    << call_expr->args.size() << " parameters";
-              }
-
-              // Replace the call with another that has the same parameters in
-              // addition to a level parameter (always zero for external
-              // textures).
-              auto* exp = ctx.Clone(call_expr->target.name);
-              auto* externalTextureParam = ctx.Clone(call_expr->args[0]);
-
-              ast::ExpressionList params;
-              if (builtin->Type() == sem::BuiltinType::kTextureLoad) {
-                auto* coordsParam = ctx.Clone(call_expr->args[1]);
-                auto* levelParam = ctx.dst->Expr(0);
-                params = {externalTextureParam, coordsParam, levelParam};
-              } else if (builtin->Type() ==
-                         sem::BuiltinType::kTextureSampleLevel) {
-                auto* samplerParam = ctx.Clone(call_expr->args[1]);
-                auto* coordsParam = ctx.Clone(call_expr->args[2]);
-                auto* levelParam = ctx.dst->Expr(0.0f);
-                params = {externalTextureParam, samplerParam, coordsParam,
-                          levelParam};
-              }
-
-              auto* newCall = ctx.dst->create<ast::CallExpression>(exp, params);
-              ctx.Replace(call_expr, newCall);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  // Scan the AST nodes for external texture declarations.
-  for (auto* node : ctx.src->ASTNodes().Objects()) {
-    if (auto* var = node->As<ast::Variable>()) {
-      if (::tint::Is<ast::ExternalTexture>(var->type)) {
-        // Replace a single-plane external texture with a 2D, f32 sampled
-        // texture.
-        auto* newType = ctx.dst->ty.sampled_texture(ast::TextureDimension::k2d,
-                                                    ctx.dst->ty.f32());
-        auto clonedSrc = ctx.Clone(var->source);
-        auto clonedSym = ctx.Clone(var->symbol);
-        auto* clonedConstructor = ctx.Clone(var->constructor);
-        auto clonedAttributes = ctx.Clone(var->attributes);
-        auto* newVar = ctx.dst->create<ast::Variable>(
-            clonedSrc, clonedSym, var->declared_storage_class,
-            var->declared_access, newType, false, false, clonedConstructor,
-            clonedAttributes);
-
-        ctx.Replace(var, newVar);
-      }
-    }
-  }
-
-  ctx.Clone();
-}
-
-}  // namespace transform
-}  // namespace tint
diff --git a/src/tint/transform/external_texture_transform.h b/src/tint/transform/external_texture_transform.h
deleted file mode 100644
index f0669f4..0000000
--- a/src/tint/transform/external_texture_transform.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_TINT_TRANSFORM_EXTERNAL_TEXTURE_TRANSFORM_H_
-#define SRC_TINT_TRANSFORM_EXTERNAL_TEXTURE_TRANSFORM_H_
-
-#include <utility>
-
-#include "src/tint/transform/transform.h"
-
-namespace tint {
-namespace transform {
-
-/// Because an external texture is comprised of 1-3 texture views we can simply
-/// transform external textures into the appropriate number of sampled textures.
-/// This allows us to share SPIR-V/HLSL writer paths for sampled textures
-/// instead of adding dedicated writer paths for external textures.
-/// ExternalTextureTransform performs this transformation.
-class ExternalTextureTransform
-    : public Castable<ExternalTextureTransform, Transform> {
- public:
-  /// Constructor
-  ExternalTextureTransform();
-  /// Destructor
-  ~ExternalTextureTransform() override;
-
- protected:
-  /// Runs the transform using the CloneContext built for transforming a
-  /// program. Run() is responsible for calling Clone() on the CloneContext.
-  /// @param ctx the CloneContext primed with the input program and
-  /// ProgramBuilder
-  /// @param inputs optional extra transform-specific input data
-  /// @param outputs optional extra transform-specific output data
-  void Run(CloneContext& ctx,
-           const DataMap& inputs,
-           DataMap& outputs) const override;
-};
-
-}  // namespace transform
-}  // namespace tint
-
-#endif  // SRC_TINT_TRANSFORM_EXTERNAL_TEXTURE_TRANSFORM_H_
diff --git a/src/tint/transform/external_texture_transform_test.cc b/src/tint/transform/external_texture_transform_test.cc
deleted file mode 100644
index 5434039..0000000
--- a/src/tint/transform/external_texture_transform_test.cc
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2021 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/tint/transform/external_texture_transform.h"
-
-#include "src/tint/transform/test_helper.h"
-
-namespace tint {
-namespace transform {
-namespace {
-
-using ExternalTextureTransformTest = TransformTest;
-
-TEST_F(ExternalTextureTransformTest, SampleLevelSinglePlane) {
-  auto* src = R"(
-@group(0) @binding(0) var s : sampler;
-
-@group(0) @binding(1) var t : texture_external;
-
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureSampleLevel(t, s, (coord.xy / vec2<f32>(4.0, 4.0)));
-}
-)";
-
-  auto* expect = R"(
-@group(0) @binding(0) var s : sampler;
-
-@group(0) @binding(1) var t : texture_2d<f32>;
-
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureSampleLevel(t, s, (coord.xy / vec2<f32>(4.0, 4.0)), 0.0);
-}
-)";
-
-  auto got = Run<ExternalTextureTransform>(src);
-
-  EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(ExternalTextureTransformTest, SampleLevelSinglePlane_OutOfOrder) {
-  auto* src = R"(
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureSampleLevel(t, s, (coord.xy / vec2<f32>(4.0, 4.0)));
-}
-
-@group(0) @binding(1) var t : texture_external;
-
-@group(0) @binding(0) var s : sampler;
-)";
-
-  auto* expect = R"(
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureSampleLevel(t, s, (coord.xy / vec2<f32>(4.0, 4.0)), 0.0);
-}
-
-@group(0) @binding(1) var t : texture_2d<f32>;
-
-@group(0) @binding(0) var s : sampler;
-)";
-
-  auto got = Run<ExternalTextureTransform>(src);
-
-  EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(ExternalTextureTransformTest, LoadSinglePlane) {
-  auto* src = R"(
-@group(0) @binding(0) var t : texture_external;
-
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureLoad(t, vec2<i32>(1, 1));
-}
-)";
-
-  auto* expect = R"(
-@group(0) @binding(0) var t : texture_2d<f32>;
-
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureLoad(t, vec2<i32>(1, 1), 0);
-}
-)";
-
-  auto got = Run<ExternalTextureTransform>(src);
-
-  EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(ExternalTextureTransformTest, LoadSinglePlane_OutOfOrder) {
-  auto* src = R"(
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureLoad(t, vec2<i32>(1, 1));
-}
-
-@group(0) @binding(0) var t : texture_external;
-)";
-
-  auto* expect = R"(
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  return textureLoad(t, vec2<i32>(1, 1), 0);
-}
-
-@group(0) @binding(0) var t : texture_2d<f32>;
-)";
-
-  auto got = Run<ExternalTextureTransform>(src);
-
-  EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(ExternalTextureTransformTest, DimensionsSinglePlane) {
-  auto* src = R"(
-@group(0) @binding(0) var t : texture_external;
-
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  var dim : vec2<i32>;
-  dim = textureDimensions(t);
-  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-}
-)";
-
-  auto* expect = R"(
-@group(0) @binding(0) var t : texture_2d<f32>;
-
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  var dim : vec2<i32>;
-  dim = textureDimensions(t);
-  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-}
-)";
-
-  auto got = Run<ExternalTextureTransform>(src);
-
-  EXPECT_EQ(expect, str(got));
-}
-
-TEST_F(ExternalTextureTransformTest, DimensionsSinglePlane_OutOfOrder) {
-  auto* src = R"(
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  var dim : vec2<i32>;
-  dim = textureDimensions(t);
-  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-}
-
-@group(0) @binding(0) var t : texture_external;
-)";
-
-  auto* expect = R"(
-@stage(fragment)
-fn main(@builtin(position) coord : vec4<f32>) -> @location(0) vec4<f32> {
-  var dim : vec2<i32>;
-  dim = textureDimensions(t);
-  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-}
-
-@group(0) @binding(0) var t : texture_2d<f32>;
-)";
-
-  auto got = Run<ExternalTextureTransform>(src);
-
-  EXPECT_EQ(expect, str(got));
-}
-
-}  // namespace
-}  // namespace transform
-}  // namespace tint
diff --git a/src/tint/transform/glsl.cc b/src/tint/transform/glsl.cc
index 4eae520..5a9b4d3 100644
--- a/src/tint/transform/glsl.cc
+++ b/src/tint/transform/glsl.cc
@@ -24,7 +24,6 @@
 #include "src/tint/transform/canonicalize_entry_point_io.h"
 #include "src/tint/transform/combine_samplers.h"
 #include "src/tint/transform/decompose_memory_access.h"
-#include "src/tint/transform/external_texture_transform.h"
 #include "src/tint/transform/fold_trivial_single_use_lets.h"
 #include "src/tint/transform/loop_to_for_loop.h"
 #include "src/tint/transform/manager.h"
@@ -102,7 +101,6 @@
     BindingRemapper::AccessControls ac;
     data.Add<BindingRemapper::Remappings>(bp, ac, /* mayCollide */ true);
   }
-  manager.Add<ExternalTextureTransform>();
   manager.Add<PromoteInitializersToConstVar>();
 
   manager.Add<PadArrayElements>();
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 01c1d88..58e564a 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -2552,6 +2552,12 @@
   } else if (auto* str = type->As<sem::Struct>()) {
     out << StructName(str);
   } else if (auto* tex = type->As<sem::Texture>()) {
+    if (tex->Is<sem::ExternalTexture>()) {
+      TINT_ICE(Writer, diagnostics_)
+          << "Multiplanar external texture transform was not run.";
+      return false;
+    }
+
     auto* storage = tex->As<sem::StorageTexture>();
     auto* ms = tex->As<sem::MultisampledTexture>();
     auto* depth_ms = tex->As<sem::DepthMultisampledTexture>();
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 79664ae..0ddd070 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -52,7 +52,6 @@
 #include "src/tint/transform/calculate_array_length.h"
 #include "src/tint/transform/canonicalize_entry_point_io.h"
 #include "src/tint/transform/decompose_memory_access.h"
-#include "src/tint/transform/external_texture_transform.h"
 #include "src/tint/transform/fold_trivial_single_use_lets.h"
 #include "src/tint/transform/localize_struct_array_assignment.h"
 #include "src/tint/transform/loop_to_for_loop.h"
@@ -206,7 +205,6 @@
   // DecomposeMemoryAccess special-cases the arrayLength() intrinsic, which
   // will be transformed by CalculateArrayLength
   manager.Add<transform::CalculateArrayLength>();
-  manager.Add<transform::ExternalTextureTransform>();
   manager.Add<transform::PromoteInitializersToConstVar>();
 
   manager.Add<transform::PadArrayElements>();
@@ -3645,6 +3643,12 @@
         return true;
       },
       [&](const sem::Texture* tex) {
+        if (tex->Is<sem::ExternalTexture>()) {
+          TINT_ICE(Writer, diagnostics_)
+              << "Multiplanar external texture transform was not run.";
+          return false;
+        }
+
         auto* storage = tex->As<sem::StorageTexture>();
         auto* ms = tex->As<sem::MultisampledTexture>();
         auto* depth_ms = tex->As<sem::DepthMultisampledTexture>();
diff --git a/src/tint/writer/msl/generator_impl.cc b/src/tint/writer/msl/generator_impl.cc
index 3a8c1dc..f29675e 100644
--- a/src/tint/writer/msl/generator_impl.cc
+++ b/src/tint/writer/msl/generator_impl.cc
@@ -61,7 +61,6 @@
 #include "src/tint/transform/array_length_from_uniform.h"
 #include "src/tint/transform/builtin_polyfill.h"
 #include "src/tint/transform/canonicalize_entry_point_io.h"
-#include "src/tint/transform/external_texture_transform.h"
 #include "src/tint/transform/manager.h"
 #include "src/tint/transform/module_scope_var_to_entry_point_param.h"
 #include "src/tint/transform/pad_array_elements.h"
@@ -174,7 +173,6 @@
     manager.Add<transform::ZeroInitWorkgroupMemory>();
   }
   manager.Add<transform::CanonicalizeEntryPointIO>();
-  manager.Add<transform::ExternalTextureTransform>();
   manager.Add<transform::PromoteInitializersToConstVar>();
 
   manager.Add<transform::VectorizeScalarMatrixConstructors>();
@@ -2366,6 +2364,12 @@
         return true;
       },
       [&](const sem::Texture* tex) {
+        if (tex->Is<sem::ExternalTexture>()) {
+          TINT_ICE(Writer, diagnostics_)
+              << "Multiplanar external texture transform was not run.";
+          return false;
+        }
+
         if (tex->IsAnyOf<sem::DepthTexture, sem::DepthMultisampledTexture>()) {
           out << "depth";
         } else {
diff --git a/src/tint/writer/spirv/builder.cc b/src/tint/writer/spirv/builder.cc
index f3eff71..83f2666 100644
--- a/src/tint/writer/spirv/builder.cc
+++ b/src/tint/writer/spirv/builder.cc
@@ -45,7 +45,6 @@
 #include "src/tint/transform/add_spirv_block_attribute.h"
 #include "src/tint/transform/builtin_polyfill.h"
 #include "src/tint/transform/canonicalize_entry_point_io.h"
-#include "src/tint/transform/external_texture_transform.h"
 #include "src/tint/transform/fold_constants.h"
 #include "src/tint/transform/for_loop_to_loop.h"
 #include "src/tint/transform/manager.h"
@@ -279,7 +278,6 @@
   manager.Add<transform::RemoveUnreachableStatements>();
   manager.Add<transform::SimplifyPointers>();  // Required for arrayLength()
   manager.Add<transform::FoldConstants>();
-  manager.Add<transform::ExternalTextureTransform>();
   manager.Add<transform::VectorizeScalarMatrixConstructors>();
   manager.Add<transform::ForLoopToLoop>();  // Must come after
                                             // ZeroInitWorkgroupMemory
@@ -4033,6 +4031,12 @@
 
 bool Builder::GenerateTextureType(const sem::Texture* texture,
                                   const Operand& result) {
+  if (texture->Is<sem::ExternalTexture>()) {
+    TINT_ICE(Writer, builder_.Diagnostics())
+        << "Multiplanar external texture transform was not run.";
+    return false;
+  }
+
   uint32_t array_literal = 0u;
   const auto dim = texture->dim();
   if (dim == ast::TextureDimension::k2dArray ||
diff --git a/test/tint/BUILD.gn b/test/tint/BUILD.gn
index d89fe88..d34430d 100644
--- a/test/tint/BUILD.gn
+++ b/test/tint/BUILD.gn
@@ -310,15 +310,14 @@
     "../../src/tint/transform/add_empty_entry_point_test.cc",
     "../../src/tint/transform/add_spirv_block_attribute_test.cc",
     "../../src/tint/transform/array_length_from_uniform_test.cc",
-    "../../src/tint/transform/builtin_polyfill_test.cc",
     "../../src/tint/transform/binding_remapper_test.cc",
+    "../../src/tint/transform/builtin_polyfill_test.cc",
     "../../src/tint/transform/calculate_array_length_test.cc",
     "../../src/tint/transform/canonicalize_entry_point_io_test.cc",
     "../../src/tint/transform/combine_samplers_test.cc",
     "../../src/tint/transform/decompose_memory_access_test.cc",
     "../../src/tint/transform/decompose_strided_array_test.cc",
     "../../src/tint/transform/decompose_strided_matrix_test.cc",
-    "../../src/tint/transform/external_texture_transform_test.cc",
     "../../src/tint/transform/first_index_offset_test.cc",
     "../../src/tint/transform/fold_constants_test.cc",
     "../../src/tint/transform/fold_trivial_single_use_lets_test.cc",
diff --git a/test/tint/bug/tint/1076.wgsl.expected.msl b/test/tint/bug/tint/1076.wgsl.expected.msl
index 926bbcb..b01d931 100644
--- a/test/tint/bug/tint/1076.wgsl.expected.msl
+++ b/test/tint/bug/tint/1076.wgsl.expected.msl
@@ -20,13 +20,13 @@
   if ((in.mask == 0u)) {
     return in;
   }
-  FragIn const tint_symbol_4 = {.a=b, .mask=1u};
-  return tint_symbol_4;
+  FragIn const tint_symbol_5 = {.a=b, .mask=1u};
+  return tint_symbol_5;
 }
 
 fragment tint_symbol_3 tint_symbol(uint mask [[sample_mask]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  FragIn const tint_symbol_5 = {.a=tint_symbol_1.a, .mask=mask};
-  FragIn const inner_result = tint_symbol_inner(tint_symbol_5, tint_symbol_1.b);
+  FragIn const tint_symbol_4 = {.a=tint_symbol_1.a, .mask=mask};
+  FragIn const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.b);
   tint_symbol_3 wrapper_result = {};
   wrapper_result.a = inner_result.a;
   wrapper_result.mask = inner_result.mask;
diff --git a/test/tint/bug/tint/749.spvasm.expected.msl b/test/tint/bug/tint/749.spvasm.expected.msl
index 1349abd..b2c64c8 100644
--- a/test/tint/bug/tint/749.spvasm.expected.msl
+++ b/test/tint/bug/tint/749.spvasm.expected.msl
@@ -61,18 +61,18 @@
   int const x_34_save = x_33;
   int const x_35 = (*(tint_symbol_81)).numbers.arr[x_34_save];
   QuicksortObject const x_943 = *(tint_symbol_81);
-  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
-  *(tint_symbol_81) = tint_symbol_3;
+  tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_4 = {.numbers=tint_symbol_3};
+  *(tint_symbol_81) = tint_symbol_4;
   *(tint_symbol_81) = x_943;
   float2 const x_527 = float2(x_526[0], x_526[0]);
   int const x_36_save = x_32;
   float3 const x_528 = float3(x_524[0], x_524[2], x_524[0]);
   (*(tint_symbol_81)).numbers.arr[x_36_save] = x_35;
   QuicksortObject const x_944 = *(tint_symbol_81);
-  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
-  *(tint_symbol_81) = tint_symbol_5;
+  tint_array_wrapper const tint_symbol_5 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_6 = {.numbers=tint_symbol_5};
+  *(tint_symbol_81) = tint_symbol_6;
   *(tint_symbol_81) = x_944;
   float3 const x_529 = float3(x_526[1], x_526[2], x_526[0]);
   int const x_945 = *(i);
@@ -95,9 +95,9 @@
   (*(tint_symbol_81)).numbers.arr[x_36_save] = 0;
   (*(tint_symbol_81)).numbers.arr[x_36_save] = x_949;
   QuicksortObject const x_950 = *(tint_symbol_81);
-  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
-  *(tint_symbol_81) = tint_symbol_7;
+  tint_array_wrapper const tint_symbol_7 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_8 = {.numbers=tint_symbol_7};
+  *(tint_symbol_81) = tint_symbol_8;
   *(tint_symbol_81) = x_950;
   float3 const x_532 = float3(x_528[0], x_528[1], x_528[0]);
   int const x_951 = (*(tint_symbol_81)).numbers.arr[x_34_save];
@@ -153,9 +153,9 @@
   float3 const x_536 = float3(x_534[0], x_534[2], x_535[0]);
   j_1 = 10;
   QuicksortObject const x_960 = *(tint_symbol_82);
-  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
-  *(tint_symbol_82) = tint_symbol_9;
+  tint_array_wrapper const tint_symbol_9 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_10 = {.numbers=tint_symbol_9};
+  *(tint_symbol_82) = tint_symbol_10;
   *(tint_symbol_82) = x_960;
   while (true) {
     int const x_961 = pivot;
@@ -170,9 +170,9 @@
     pivot = x_963;
     x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
     QuicksortObject const x_964 = *(tint_symbol_82);
-    tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
-    *(tint_symbol_82) = tint_symbol_11;
+    tint_array_wrapper const tint_symbol_11 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_12 = {.numbers=tint_symbol_11};
+    *(tint_symbol_82) = tint_symbol_12;
     *(tint_symbol_82) = x_964;
     int const x_56 = *(h);
     int const x_965 = *(h);
@@ -206,9 +206,9 @@
     param_1 = x_971;
     int const x_62 = (*(tint_symbol_82)).numbers.arr[x_61_save];
     QuicksortObject const x_972 = *(tint_symbol_82);
-    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
-    *(tint_symbol_82) = tint_symbol_13;
+    tint_array_wrapper const tint_symbol_13 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_14 = {.numbers=tint_symbol_13};
+    *(tint_symbol_82) = tint_symbol_14;
     *(tint_symbol_82) = x_972;
     int const x_63 = pivot;
     float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
@@ -267,9 +267,9 @@
       param_1 = x_985;
     }
     QuicksortObject const x_986 = *(tint_symbol_82);
-    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
-    *(tint_symbol_82) = tint_symbol_15;
+    tint_array_wrapper const tint_symbol_15 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_16 = {.numbers=tint_symbol_15};
+    *(tint_symbol_82) = tint_symbol_16;
     *(tint_symbol_82) = x_986;
     {
       int const x_987 = *(h);
@@ -302,9 +302,9 @@
   (*(tint_symbol_82)).numbers.arr[x_42_save] = x_993;
   float2 const x_549 = float2(x_534[0], x_534[1]);
   QuicksortObject const x_994 = *(tint_symbol_82);
-  tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
-  *(tint_symbol_82) = tint_symbol_17;
+  tint_array_wrapper const tint_symbol_17 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_18 = {.numbers=tint_symbol_17};
+  *(tint_symbol_82) = tint_symbol_18;
   *(tint_symbol_82) = x_994;
   int const x_995 = *(h);
   *(h) = 0;
@@ -372,8 +372,8 @@
   param_5 = x_1007;
   h_1 = 9;
   tint_array_wrapper const x_1008 = stack;
-  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  stack = tint_symbol_18;
+  tint_array_wrapper const tint_symbol_19 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  stack = tint_symbol_19;
   stack = x_1008;
   float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
   int const x_1009 = param_5;
@@ -406,15 +406,15 @@
   param_4 = x_1015;
   int const x_95 = l_1;
   QuicksortObject const x_1016 = *(tint_symbol_83);
-  tint_array_wrapper const tint_symbol_19 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
-  *(tint_symbol_83) = tint_symbol_20;
+  tint_array_wrapper const tint_symbol_20 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_21 = {.numbers=tint_symbol_20};
+  *(tint_symbol_83) = tint_symbol_21;
   *(tint_symbol_83) = x_1016;
   float3 const x_560 = float3(x_559[1], x_559[0], x_557[0]);
   int const x_96_save = x_94;
   tint_array_wrapper const x_1017 = stack;
-  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  stack = tint_symbol_21;
+  tint_array_wrapper const tint_symbol_22 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  stack = tint_symbol_22;
   stack = x_1017;
   float3 const x_561 = float3(x_556[1], x_556[1], x_556[1]);
   int const x_1018 = l_1;
@@ -464,13 +464,13 @@
     h_1 = 0;
     h_1 = x_1028;
     tint_array_wrapper const x_1029 = stack;
-    tint_array_wrapper const tint_symbol_22 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    stack = tint_symbol_22;
+    tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    stack = tint_symbol_23;
     stack = x_1029;
     int const x_106 = top;
     tint_array_wrapper const x_1030 = stack;
-    tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    stack = tint_symbol_23;
+    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    stack = tint_symbol_24;
     stack = x_1030;
     float2 const x_567 = float2(x_558[0], x_564[2]);
     int const x_1031 = param_4;
@@ -481,9 +481,9 @@
       break;
     }
     QuicksortObject const x_1032 = *(tint_symbol_83);
-    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
-    *(tint_symbol_83) = tint_symbol_25;
+    tint_array_wrapper const tint_symbol_25 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_26 = {.numbers=tint_symbol_25};
+    *(tint_symbol_83) = tint_symbol_26;
     *(tint_symbol_83) = x_1032;
     float3 const x_568 = float3(x_559[1], x_559[0], x_563[1]);
     int const x_1033 = param_4;
@@ -508,8 +508,8 @@
     stack.arr[x_96_save] = x_1037;
     int const x_111 = stack.arr[x_110_save];
     tint_array_wrapper const x_1038 = stack;
-    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    stack = tint_symbol_26;
+    tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    stack = tint_symbol_27;
     stack = x_1038;
     float3 const x_571 = float3(x_559[1], x_559[0], x_564[1]);
     int const x_1039 = l_1;
@@ -517,8 +517,8 @@
     l_1 = x_1039;
     h_1 = x_111;
     tint_array_wrapper const x_1040 = stack;
-    tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    stack = tint_symbol_27;
+    tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    stack = tint_symbol_28;
     stack = x_1040;
     float2 const x_572 = float2(x_562[1], x_561[1]);
     int const x_1041 = p;
@@ -610,8 +610,8 @@
       stack.arr[x_100_save] = 0;
       stack.arr[x_100_save] = x_1061;
       tint_array_wrapper const x_1062 = stack;
-      tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      stack = tint_symbol_28;
+      tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+      stack = tint_symbol_29;
       stack = x_1062;
       float2 const x_584 = float2(x_569[2], x_569[1]);
       float3 const x_585 = float3(x_580[1], x_577[0], x_577[0]);
@@ -650,8 +650,8 @@
       h_1 = x_1070;
       top = x_133;
       tint_array_wrapper const x_1071 = stack;
-      tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      stack = tint_symbol_29;
+      tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+      stack = tint_symbol_30;
       stack = x_1071;
       int const x_134 = p;
       float2 const x_590 = float2(x_576[0], x_573[1]);
@@ -676,9 +676,9 @@
     stack.arr[x_96_save] = x_1076;
     float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
     QuicksortObject const x_1077 = *(tint_symbol_83);
-    tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
-    *(tint_symbol_83) = tint_symbol_31;
+    tint_array_wrapper const tint_symbol_31 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_32 = {.numbers=tint_symbol_31};
+    *(tint_symbol_83) = tint_symbol_32;
     *(tint_symbol_83) = x_1077;
     int const x_137 = p;
     int const x_1078 = stack.arr[x_114_save];
@@ -743,8 +743,8 @@
       float2 const x_601 = float2(x_563[0], x_563[1]);
       stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
       tint_array_wrapper const x_1093 = stack;
-      tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      stack = tint_symbol_32;
+      tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+      stack = tint_symbol_33;
       stack = x_1093;
       int const x_148 = top;
       int const x_1094 = stack.arr[x_114_save];
@@ -752,8 +752,8 @@
       stack.arr[x_114_save] = x_1094;
       float2 const x_602 = float2(x_565[1], x_599[1]);
       tint_array_wrapper const x_1095 = stack;
-      tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      stack = tint_symbol_33;
+      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+      stack = tint_symbol_34;
       stack = x_1095;
       int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
       int const x_1096 = stack.arr[x_147_save];
@@ -788,9 +788,9 @@
       l_1 = x_1103;
       float2 const x_604 = float2(x_563[2], x_564[0]);
       QuicksortObject const x_1104 = *(tint_symbol_83);
-      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
-      *(tint_symbol_83) = tint_symbol_35;
+      tint_array_wrapper const tint_symbol_35 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+      QuicksortObject const tint_symbol_36 = {.numbers=tint_symbol_35};
+      *(tint_symbol_83) = tint_symbol_36;
       *(tint_symbol_83) = x_1104;
     }
   }
@@ -809,15 +809,15 @@
   uv = x_717;
   i_2 = 0;
   QuicksortObject const x_721 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
-  *(tint_symbol_84) = tint_symbol_37;
+  tint_array_wrapper const tint_symbol_37 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_38 = {.numbers=tint_symbol_37};
+  *(tint_symbol_84) = tint_symbol_38;
   *(tint_symbol_84) = x_721;
   if (true) {
     QuicksortObject const x_722 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_38 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
-    *(tint_symbol_84) = tint_symbol_39;
+    tint_array_wrapper const tint_symbol_39 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_40 = {.numbers=tint_symbol_39};
+    *(tint_symbol_84) = tint_symbol_40;
     *(tint_symbol_84) = x_722;
     float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
     int const x_158 = i_2;
@@ -829,15 +829,15 @@
     color = x_725;
     float2 const x_432 = float2(x_431[1], x_431[1]);
     QuicksortObject const x_726 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
-    *(tint_symbol_84) = tint_symbol_41;
+    tint_array_wrapper const tint_symbol_41 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_42 = {.numbers=tint_symbol_41};
+    *(tint_symbol_84) = tint_symbol_42;
     *(tint_symbol_84) = x_726;
   }
   QuicksortObject const x_756 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_42 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
-  *(tint_symbol_84) = tint_symbol_43;
+  tint_array_wrapper const tint_symbol_43 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_44 = {.numbers=tint_symbol_43};
+  *(tint_symbol_84) = tint_symbol_44;
   *(tint_symbol_84) = x_756;
   float2 const x_446 = float2(float2()[0], float2()[0]);
   int const x_757 = i_2;
@@ -845,9 +845,9 @@
   i_2 = x_757;
   quicksort_(tint_symbol_84);
   QuicksortObject const x_758 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_44 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
-  *(tint_symbol_84) = tint_symbol_45;
+  tint_array_wrapper const tint_symbol_45 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_46 = {.numbers=tint_symbol_45};
+  *(tint_symbol_84) = tint_symbol_46;
   *(tint_symbol_84) = x_758;
   float4 const x_184 = *(tint_symbol_85);
   float2 const x_759 = uv;
@@ -860,18 +860,18 @@
   float2 const x_185 = float2(x_184[0], x_184[1]);
   float3 const x_448 = float3(x_185[1], x_446[1], x_446[1]);
   QuicksortObject const x_761 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
-  *(tint_symbol_84) = tint_symbol_47;
+  tint_array_wrapper const tint_symbol_47 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_48 = {.numbers=tint_symbol_47};
+  *(tint_symbol_84) = tint_symbol_48;
   *(tint_symbol_84) = x_761;
   float2 const x_762 = uv;
   uv = float2(0.0f, 0.0f);
   uv = x_762;
   float2 const x_191 = (*(tint_symbol_86)).resolution;
   QuicksortObject const x_763 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_48 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
-  *(tint_symbol_84) = tint_symbol_49;
+  tint_array_wrapper const tint_symbol_49 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_50 = {.numbers=tint_symbol_49};
+  *(tint_symbol_84) = tint_symbol_50;
   *(tint_symbol_84) = x_763;
   float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
   float3 const x_764 = color;
@@ -879,9 +879,9 @@
   color = x_764;
   float2 const x_192 = (x_185 / x_191);
   QuicksortObject const x_765 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_50 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
-  *(tint_symbol_84) = tint_symbol_51;
+  tint_array_wrapper const tint_symbol_51 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_52 = {.numbers=tint_symbol_51};
+  *(tint_symbol_84) = tint_symbol_52;
   *(tint_symbol_84) = x_765;
   float2 const x_450 = float2(x_447[0], x_185[1]);
   float3 const x_766 = color;
@@ -897,18 +897,18 @@
   color = x_768;
   float3 const x_451 = float3(x_185[0], x_185[1], x_446[1]);
   QuicksortObject const x_769 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
-  *(tint_symbol_84) = tint_symbol_53;
+  tint_array_wrapper const tint_symbol_53 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_54 = {.numbers=tint_symbol_53};
+  *(tint_symbol_84) = tint_symbol_54;
   *(tint_symbol_84) = x_769;
   int const x_770 = (*(tint_symbol_84)).numbers.arr[0u];
   (*(tint_symbol_84)).numbers.arr[0u] = 0;
   (*(tint_symbol_84)).numbers.arr[0u] = x_770;
   int const x_201 = (*(tint_symbol_84)).numbers.arr[0u];
   QuicksortObject const x_771 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_54 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
-  *(tint_symbol_84) = tint_symbol_55;
+  tint_array_wrapper const tint_symbol_55 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_56 = {.numbers=tint_symbol_55};
+  *(tint_symbol_84) = tint_symbol_56;
   *(tint_symbol_84) = x_771;
   int const x_772 = (*(tint_symbol_84)).numbers.arr[0u];
   (*(tint_symbol_84)).numbers.arr[0u] = 0;
@@ -922,9 +922,9 @@
   i_2 = 0;
   i_2 = x_774;
   QuicksortObject const x_775 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_56 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
-  *(tint_symbol_84) = tint_symbol_57;
+  tint_array_wrapper const tint_symbol_57 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_58 = {.numbers=tint_symbol_57};
+  *(tint_symbol_84) = tint_symbol_58;
   *(tint_symbol_84) = x_775;
   float3 const x_453 = float3(x_451[0], x_450[0], x_450[1]);
   color[0] = (x_206 + float(x_201));
@@ -941,9 +941,9 @@
   uv[0] = 0.0f;
   uv[0] = x_778;
   QuicksortObject const x_779 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
-  *(tint_symbol_84) = tint_symbol_59;
+  tint_array_wrapper const tint_symbol_59 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_60 = {.numbers=tint_symbol_59};
+  *(tint_symbol_84) = tint_symbol_60;
   *(tint_symbol_84) = x_779;
   if ((x_210 > 0.25f)) {
     int const x_780 = i_2;
@@ -958,18 +958,18 @@
     uv[0] = x_782;
     int const x_216 = (*(tint_symbol_84)).numbers.arr[1];
     QuicksortObject const x_783 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
-    *(tint_symbol_84) = tint_symbol_61;
+    tint_array_wrapper const tint_symbol_61 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_62 = {.numbers=tint_symbol_61};
+    *(tint_symbol_84) = tint_symbol_62;
     *(tint_symbol_84) = x_783;
     float2 const x_457 = float2(x_454[0], x_454[0]);
     float2 const x_784 = uv;
     uv = float2(0.0f, 0.0f);
     uv = x_784;
     QuicksortObject const x_785 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_62 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
-    *(tint_symbol_84) = tint_symbol_63;
+    tint_array_wrapper const tint_symbol_63 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_64 = {.numbers=tint_symbol_63};
+    *(tint_symbol_84) = tint_symbol_64;
     *(tint_symbol_84) = x_785;
     float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2()[1]);
     int const x_786 = i_2;
@@ -1087,9 +1087,9 @@
     color[0] = 0.0f;
     color[0] = x_816;
     QuicksortObject const x_817 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
-    *(tint_symbol_84) = tint_symbol_65;
+    tint_array_wrapper const tint_symbol_65 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_66 = {.numbers=tint_symbol_65};
+    *(tint_symbol_84) = tint_symbol_66;
     *(tint_symbol_84) = x_817;
     float3 const x_468 = float3(x_467[0], x_467[0], x_467[0]);
     float const x_818 = uv[0];
@@ -1198,9 +1198,9 @@
     uv[0] = x_844;
     float3 const x_482 = float3(x_455[0], x_475[1], x_455[1]);
     QuicksortObject const x_845 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
-    *(tint_symbol_84) = tint_symbol_67;
+    tint_array_wrapper const tint_symbol_67 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_68 = {.numbers=tint_symbol_67};
+    *(tint_symbol_84) = tint_symbol_68;
     *(tint_symbol_84) = x_845;
     float const x_846 = uv[1];
     uv[1] = 0.0f;
@@ -1271,9 +1271,9 @@
     (*(tint_symbol_84)).numbers.arr[6u] = x_863;
     float2 const x_490 = float2(x_480[2], x_480[2]);
     QuicksortObject const x_864 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
-    *(tint_symbol_84) = tint_symbol_69;
+    tint_array_wrapper const tint_symbol_69 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_70 = {.numbers=tint_symbol_69};
+    *(tint_symbol_84) = tint_symbol_70;
     *(tint_symbol_84) = x_864;
     color[1] = (float(x_280) + x_283);
     float const x_865 = color[0];
@@ -1290,9 +1290,9 @@
   color[0] = x_867;
   float const x_287 = uv[1];
   QuicksortObject const x_868 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
-  *(tint_symbol_84) = tint_symbol_71;
+  tint_array_wrapper const tint_symbol_71 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_72 = {.numbers=tint_symbol_71};
+  *(tint_symbol_84) = tint_symbol_72;
   *(tint_symbol_84) = x_868;
   float2 const x_493 = float2(x_475[0], x_475[1]);
   float const x_869 = uv[0];
@@ -1452,9 +1452,9 @@
     uv[0] = 0.0f;
     uv[0] = x_910;
     QuicksortObject const x_911 = *(tint_symbol_84);
-    tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
-    *(tint_symbol_84) = tint_symbol_73;
+    tint_array_wrapper const tint_symbol_73 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+    QuicksortObject const tint_symbol_74 = {.numbers=tint_symbol_73};
+    *(tint_symbol_84) = tint_symbol_74;
     *(tint_symbol_84) = x_911;
     float3 const x_513 = float3(x_505[2], x_505[0], x_448[0]);
     int const x_912 = (*(tint_symbol_84)).numbers.arr[8];
@@ -1506,14 +1506,14 @@
   uv[0] = 0.0f;
   uv[0] = x_923;
   QuicksortObject const x_924 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
-  *(tint_symbol_84) = tint_symbol_75;
+  tint_array_wrapper const tint_symbol_75 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_76 = {.numbers=tint_symbol_75};
+  *(tint_symbol_84) = tint_symbol_76;
   *(tint_symbol_84) = x_924;
   QuicksortObject const x_925 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_76 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
-  *(tint_symbol_84) = tint_symbol_77;
+  tint_array_wrapper const tint_symbol_77 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_78 = {.numbers=tint_symbol_77};
+  *(tint_symbol_84) = tint_symbol_78;
   *(tint_symbol_84) = x_925;
   float const x_926 = color[1];
   color[1] = 0.0f;
@@ -1532,9 +1532,9 @@
   uv[0] = x_929;
   *(tint_symbol_87) = x_330;
   QuicksortObject const x_930 = *(tint_symbol_84);
-  tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
-  *(tint_symbol_84) = tint_symbol_79;
+  tint_array_wrapper const tint_symbol_79 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+  QuicksortObject const tint_symbol_80 = {.numbers=tint_symbol_79};
+  *(tint_symbol_84) = tint_symbol_80;
   *(tint_symbol_84) = x_930;
   float3 const x_522 = float3(x_330[3], x_330[1], x_493[0]);
   float const x_931 = color[0];
@@ -1554,8 +1554,8 @@
 main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_88, thread QuicksortObject* const tint_symbol_89, const constant buf0* const tint_symbol_90, thread float4* const tint_symbol_91) {
   *(tint_symbol_88) = gl_FragCoord_param;
   main_1(tint_symbol_89, tint_symbol_88, tint_symbol_90, tint_symbol_91);
-  main_out const tint_symbol_80 = {.x_GLF_color_1=*(tint_symbol_91)};
-  return tint_symbol_80;
+  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_91)};
+  return tint_symbol_2;
 }
 
 fragment tint_symbol_1 tint_symbol(const constant buf0* tint_symbol_94 [[buffer(0)]], float4 gl_FragCoord_param [[position]]) {
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
index 707e474..c0f864e 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -1,51 +1,11 @@
-#version 310 es
+SKIP: FAILED
 
-uniform highp sampler2D arg_0_1;
-void textureDimensions_ba1481() {
-  ivec2 res = textureSize(arg_0_1, 0);
-}
+C:\src\tint2\src\writer\glsl\generator_impl.cc:2510 internal compiler error: Multiplanar external texture transform was not run.
 
-vec4 vertex_main() {
-  textureDimensions_ba1481();
-  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
-}
 
-void main() {
-  vec4 inner_result = vertex_main();
-  gl_Position = inner_result;
-  gl_Position.y = -(gl_Position.y);
-  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
-  return;
-}
-#version 310 es
-precision mediump float;
-
-uniform highp sampler2D arg_0_1;
-void textureDimensions_ba1481() {
-  ivec2 res = textureSize(arg_0_1, 0);
-}
-
-void fragment_main() {
-  textureDimensions_ba1481();
-}
-
-void main() {
-  fragment_main();
-  return;
-}
-#version 310 es
-
-uniform highp sampler2D arg_0_1;
-void textureDimensions_ba1481() {
-  ivec2 res = textureSize(arg_0_1, 0);
-}
-
-void compute_main() {
-  textureDimensions_ba1481();
-}
-
-layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
-void main() {
-  compute_main();
-  return;
-}
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl
index ef89299..b3cea20 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.hlsl
@@ -1,34 +1,11 @@
-Texture2D<float4> arg_0 : register(t0, space1);
+SKIP: FAILED
 
-void textureDimensions_ba1481() {
-  int2 tint_tmp;
-  arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
-  int2 res = tint_tmp;
-}
+C:\src\tint2\src\writer\hlsl\generator_impl.cc:3632 internal compiler error: Multiplanar external texture transform was not run.
 
-struct tint_symbol {
-  float4 value : SV_Position;
-};
 
-float4 vertex_main_inner() {
-  textureDimensions_ba1481();
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  textureDimensions_ba1481();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  textureDimensions_ba1481();
-  return;
-}
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl
index 5162685..21d485b 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.msl
@@ -1,33 +1,11 @@
-#include <metal_stdlib>
+SKIP: FAILED
 
-using namespace metal;
-void textureDimensions_ba1481(texture2d<float, access::sample> tint_symbol_1) {
-  int2 res = int2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
-}
+C:\src\tint2\src\writer\msl\generator_impl.cc:2344 internal compiler error: Multiplanar external texture transform was not run.
 
-struct tint_symbol {
-  float4 value [[position]];
-};
 
-float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_2) {
-  textureDimensions_ba1481(tint_symbol_2);
-  return float4();
-}
-
-vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
-  float4 const inner_result = vertex_main_inner(tint_symbol_3);
-  tint_symbol wrapper_result = {};
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-fragment void fragment_main(texture2d<float, access::sample> tint_symbol_4 [[texture(0)]]) {
-  textureDimensions_ba1481(tint_symbol_4);
-  return;
-}
-
-kernel void compute_main(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
-  textureDimensions_ba1481(tint_symbol_5);
-  return;
-}
-
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm
index 9d157ae..87554bb 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.spvasm
@@ -1,76 +1,11 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
-               OpEntryPoint Fragment %fragment_main "fragment_main"
-               OpEntryPoint GLCompute %compute_main "compute_main"
-               OpExecutionMode %fragment_main OriginUpperLeft
-               OpExecutionMode %compute_main LocalSize 1 1 1
-               OpName %value "value"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %arg_0 "arg_0"
-               OpName %textureDimensions_ba1481 "textureDimensions_ba1481"
-               OpName %res "res"
-               OpName %vertex_main_inner "vertex_main_inner"
-               OpName %vertex_main "vertex_main"
-               OpName %fragment_main "fragment_main"
-               OpName %compute_main "compute_main"
-               OpDecorate %value BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %arg_0 DescriptorSet 1
-               OpDecorate %arg_0 Binding 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-      %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-         %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
-      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_0 = OpConstant %int 0
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %23 = OpConstantNull %v2int
-         %24 = OpTypeFunction %v4float
-    %float_1 = OpConstant %float 1
-%textureDimensions_ba1481 = OpFunction %void None %12
-         %15 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %23
-         %19 = OpLoad %11 %arg_0
-         %16 = OpImageQuerySizeLod %v2int %19 %int_0
-               OpStore %res %16
-               OpReturn
-               OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureDimensions_ba1481
-               OpReturnValue %5
-               OpFunctionEnd
-%vertex_main = OpFunction %void None %12
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %12
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %textureDimensions_ba1481
-               OpReturn
-               OpFunctionEnd
-%compute_main = OpFunction %void None %12
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %textureDimensions_ba1481
-               OpReturn
-               OpFunctionEnd
+SKIP: FAILED
+
+C:\src\tint2\src\writer\spirv\builder.cc:4013 internal compiler error: Multiplanar external texture transform was not run.
+
+
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
index 3e78a01..c0f864e 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -1,51 +1,11 @@
-#version 310 es
+SKIP: FAILED
 
-uniform highp sampler2D arg_0_1;
-void textureLoad_8acf41() {
-  vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
-}
+C:\src\tint2\src\writer\glsl\generator_impl.cc:2510 internal compiler error: Multiplanar external texture transform was not run.
 
-vec4 vertex_main() {
-  textureLoad_8acf41();
-  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
-}
 
-void main() {
-  vec4 inner_result = vertex_main();
-  gl_Position = inner_result;
-  gl_Position.y = -(gl_Position.y);
-  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
-  return;
-}
-#version 310 es
-precision mediump float;
-
-uniform highp sampler2D arg_0_1;
-void textureLoad_8acf41() {
-  vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
-}
-
-void fragment_main() {
-  textureLoad_8acf41();
-}
-
-void main() {
-  fragment_main();
-  return;
-}
-#version 310 es
-
-uniform highp sampler2D arg_0_1;
-void textureLoad_8acf41() {
-  vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
-}
-
-void compute_main() {
-  textureLoad_8acf41();
-}
-
-layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
-void main() {
-  compute_main();
-  return;
-}
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl
index 4bfd217..b3cea20 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.hlsl
@@ -1,32 +1,11 @@
-Texture2D<float4> arg_0 : register(t0, space1);
+SKIP: FAILED
 
-void textureLoad_8acf41() {
-  float4 res = arg_0.Load(int3(0, 0, 0));
-}
+C:\src\tint2\src\writer\hlsl\generator_impl.cc:3632 internal compiler error: Multiplanar external texture transform was not run.
 
-struct tint_symbol {
-  float4 value : SV_Position;
-};
 
-float4 vertex_main_inner() {
-  textureLoad_8acf41();
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  textureLoad_8acf41();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  textureLoad_8acf41();
-  return;
-}
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl
index 994e6eb..21d485b 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.msl
@@ -1,33 +1,11 @@
-#include <metal_stdlib>
+SKIP: FAILED
 
-using namespace metal;
-void textureLoad_8acf41(texture2d<float, access::sample> tint_symbol_1) {
-  float4 res = tint_symbol_1.read(uint2(int2()), 0);
-}
+C:\src\tint2\src\writer\msl\generator_impl.cc:2344 internal compiler error: Multiplanar external texture transform was not run.
 
-struct tint_symbol {
-  float4 value [[position]];
-};
 
-float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_2) {
-  textureLoad_8acf41(tint_symbol_2);
-  return float4();
-}
-
-vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
-  float4 const inner_result = vertex_main_inner(tint_symbol_3);
-  tint_symbol wrapper_result = {};
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-fragment void fragment_main(texture2d<float, access::sample> tint_symbol_4 [[texture(0)]]) {
-  textureLoad_8acf41(tint_symbol_4);
-  return;
-}
-
-kernel void compute_main(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
-  textureLoad_8acf41(tint_symbol_5);
-  return;
-}
-
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm
index 17ac507..87554bb 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.spvasm
@@ -1,75 +1,11 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
-               OpEntryPoint Fragment %fragment_main "fragment_main"
-               OpEntryPoint GLCompute %compute_main "compute_main"
-               OpExecutionMode %fragment_main OriginUpperLeft
-               OpExecutionMode %compute_main LocalSize 1 1 1
-               OpName %value "value"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %arg_0 "arg_0"
-               OpName %textureLoad_8acf41 "textureLoad_8acf41"
-               OpName %res "res"
-               OpName %vertex_main_inner "vertex_main_inner"
-               OpName %vertex_main "vertex_main"
-               OpName %fragment_main "fragment_main"
-               OpName %compute_main "compute_main"
-               OpDecorate %value BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %arg_0 DescriptorSet 1
-               OpDecorate %arg_0 Binding 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-      %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-         %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
-      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-         %20 = OpConstantNull %v2int
-      %int_0 = OpConstant %int 0
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %24 = OpTypeFunction %v4float
-    %float_1 = OpConstant %float 1
-%textureLoad_8acf41 = OpFunction %void None %12
-         %15 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-         %17 = OpLoad %11 %arg_0
-         %16 = OpImageFetch %v4float %17 %20 Lod %int_0
-               OpStore %res %16
-               OpReturn
-               OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %textureLoad_8acf41
-               OpReturnValue %5
-               OpFunctionEnd
-%vertex_main = OpFunction %void None %12
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %12
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %textureLoad_8acf41
-               OpReturn
-               OpFunctionEnd
-%compute_main = OpFunction %void None %12
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %textureLoad_8acf41
-               OpReturn
-               OpFunctionEnd
+SKIP: FAILED
+
+C:\src\tint2\src\writer\spirv\builder.cc:4013 internal compiler error: Multiplanar external texture transform was not run.
+
+
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
index 0f3fecc..c0f864e 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -1,54 +1,11 @@
-#version 310 es
+SKIP: FAILED
 
-uniform highp sampler2D arg_0_arg_1;
+C:\src\tint2\src\writer\glsl\generator_impl.cc:2510 internal compiler error: Multiplanar external texture transform was not run.
 
-void textureSampleLevel_979816() {
-  vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
-}
 
-vec4 vertex_main() {
-  textureSampleLevel_979816();
-  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-void main() {
-  vec4 inner_result = vertex_main();
-  gl_Position = inner_result;
-  gl_Position.y = -(gl_Position.y);
-  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
-  return;
-}
-#version 310 es
-precision mediump float;
-
-uniform highp sampler2D arg_0_arg_1;
-
-void textureSampleLevel_979816() {
-  vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
-}
-
-void fragment_main() {
-  textureSampleLevel_979816();
-}
-
-void main() {
-  fragment_main();
-  return;
-}
-#version 310 es
-
-uniform highp sampler2D arg_0_arg_1;
-
-void textureSampleLevel_979816() {
-  vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
-}
-
-void compute_main() {
-  textureSampleLevel_979816();
-}
-
-layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
-void main() {
-  compute_main();
-  return;
-}
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl
index 9a039f3..b3cea20 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.hlsl
@@ -1,33 +1,11 @@
-Texture2D<float4> arg_0 : register(t0, space1);
-SamplerState arg_1 : register(s1, space1);
+SKIP: FAILED
 
-void textureSampleLevel_979816() {
-  float4 res = arg_0.SampleLevel(arg_1, float2(0.0f, 0.0f), 0.0f);
-}
+C:\src\tint2\src\writer\hlsl\generator_impl.cc:3632 internal compiler error: Multiplanar external texture transform was not run.
 
-struct tint_symbol {
-  float4 value : SV_Position;
-};
 
-float4 vertex_main_inner() {
-  textureSampleLevel_979816();
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  textureSampleLevel_979816();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  textureSampleLevel_979816();
-  return;
-}
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl
index 47e2da1..21d485b 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.msl
@@ -1,33 +1,11 @@
-#include <metal_stdlib>
+SKIP: FAILED
 
-using namespace metal;
-void textureSampleLevel_979816(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float4 res = tint_symbol_1.sample(tint_symbol_2, float2(), level(0.0f));
-}
+C:\src\tint2\src\writer\msl\generator_impl.cc:2344 internal compiler error: Multiplanar external texture transform was not run.
 
-struct tint_symbol {
-  float4 value [[position]];
-};
 
-float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_3, sampler tint_symbol_4) {
-  textureSampleLevel_979816(tint_symbol_3, tint_symbol_4);
-  return float4();
-}
-
-vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]], sampler tint_symbol_6 [[sampler(0)]]) {
-  float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
-  tint_symbol wrapper_result = {};
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-fragment void fragment_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]], sampler tint_symbol_8 [[sampler(0)]]) {
-  textureSampleLevel_979816(tint_symbol_7, tint_symbol_8);
-  return;
-}
-
-kernel void compute_main(texture2d<float, access::sample> tint_symbol_9 [[texture(0)]], sampler tint_symbol_10 [[sampler(0)]]) {
-  textureSampleLevel_979816(tint_symbol_9, tint_symbol_10);
-  return;
-}
-
+********************************************************************
+*  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.  *
+********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm
index 6420fc9..87554bb 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.spvasm
@@ -1,83 +1,11 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
-               OpEntryPoint Fragment %fragment_main "fragment_main"
-               OpEntryPoint GLCompute %compute_main "compute_main"
-               OpExecutionMode %fragment_main OriginUpperLeft
-               OpExecutionMode %compute_main LocalSize 1 1 1
-               OpName %value "value"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %arg_0 "arg_0"
-               OpName %arg_1 "arg_1"
-               OpName %textureSampleLevel_979816 "textureSampleLevel_979816"
-               OpName %res "res"
-               OpName %vertex_main_inner "vertex_main_inner"
-               OpName %vertex_main "vertex_main"
-               OpName %fragment_main "fragment_main"
-               OpName %compute_main "compute_main"
-               OpDecorate %value BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %arg_0 DescriptorSet 1
-               OpDecorate %arg_0 Binding 0
-               OpDecorate %arg_1 DescriptorSet 1
-               OpDecorate %arg_1 Binding 1
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-      %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-         %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
-      %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
-         %14 = OpTypeSampler
-%_ptr_UniformConstant_14 = OpTypePointer UniformConstant %14
-      %arg_1 = OpVariable %_ptr_UniformConstant_14 UniformConstant
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-         %22 = OpTypeSampledImage %11
-    %v2float = OpTypeVector %float 2
-         %25 = OpConstantNull %v2float
-    %float_0 = OpConstant %float 0
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %29 = OpTypeFunction %v4float
-    %float_1 = OpConstant %float 1
-%textureSampleLevel_979816 = OpFunction %void None %15
-         %18 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-         %20 = OpLoad %14 %arg_1
-         %21 = OpLoad %11 %arg_0
-         %23 = OpSampledImage %22 %21 %20
-         %19 = OpImageSampleExplicitLod %v4float %23 %25 Lod %float_0
-               OpStore %res %19
-               OpReturn
-               OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %textureSampleLevel_979816
-               OpReturnValue %5
-               OpFunctionEnd
-%vertex_main = OpFunction %void None %15
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%fragment_main = OpFunction %void None %15
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %textureSampleLevel_979816
-               OpReturn
-               OpFunctionEnd
-%compute_main = OpFunction %void None %15
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %textureSampleLevel_979816
-               OpReturn
-               OpFunctionEnd
+SKIP: FAILED
+
+C:\src\tint2\src\writer\spirv\builder.cc:4013 internal compiler error: Multiplanar external texture transform was not run.
+
+
+********************************************************************
+*  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.  *
+********************************************************************