Add optional access to ptr<>

This also completes the work to resolve the access controls for each
storage type.

Fixed: tint:846
Change-Id: Iab24057ec14620a2978ec63c4a91ba12d1bc6e9b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53381
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/ast/alias_test.cc b/src/ast/alias_test.cc
index 9adebbd..d3c5ec7 100644
--- a/src/ast/alias_test.cc
+++ b/src/ast/alias_test.cc
@@ -67,7 +67,7 @@
   auto* u32 = create<U32>();
   auto* a = create<Alias>(Sym("a_type"), u32);
   auto* aa = create<Alias>(Sym("aa_type"), a);
-  auto* paa = create<Pointer>(aa, StorageClass::kUniform);
+  auto* paa = create<Pointer>(aa, StorageClass::kUniform, Access::kUndefined);
   auto* apaa = create<Alias>(Sym("paa_type"), paa);
   auto* aapaa = create<Alias>(Sym("aapaa_type"), apaa);
 
diff --git a/src/ast/pointer.cc b/src/ast/pointer.cc
index 3c13998..77d8958 100644
--- a/src/ast/pointer.cc
+++ b/src/ast/pointer.cc
@@ -24,14 +24,19 @@
 Pointer::Pointer(ProgramID program_id,
                  const Source& source,
                  Type* const subtype,
-                 ast::StorageClass storage_class)
+                 ast::StorageClass storage_class,
+                 ast::Access access)
     : Base(program_id, source),
       subtype_(subtype),
-      storage_class_(storage_class) {}
+      storage_class_(storage_class),
+      access_(access) {}
 
 std::string Pointer::type_name() const {
   std::ostringstream out;
   out << "__ptr_" << storage_class_ << subtype_->type_name();
+  if (access_ != ast::Access::kUndefined) {
+    out << "_" << access_;
+  }
   return out.str();
 }
 
@@ -41,7 +46,11 @@
   if (storage_class_ != ast::StorageClass::kNone) {
     out << storage_class_ << ", ";
   }
-  out << subtype_->FriendlyName(symbols) << ">";
+  out << subtype_->FriendlyName(symbols);
+  if (access_ != ast::Access::kUndefined) {
+    out << ", " << access_;
+  }
+  out << ">";
   return out.str();
 }
 
@@ -53,7 +62,7 @@
   // Clone arguments outside of create() call to have deterministic ordering
   auto src = ctx->Clone(source());
   auto* ty = ctx->Clone(type());
-  return ctx->dst->create<Pointer>(src, ty, storage_class_);
+  return ctx->dst->create<Pointer>(src, ty, storage_class_, access_);
 }
 
 }  // namespace ast
diff --git a/src/ast/pointer.h b/src/ast/pointer.h
index 18b5a34..c7bba99 100644
--- a/src/ast/pointer.h
+++ b/src/ast/pointer.h
@@ -17,6 +17,7 @@
 
 #include <string>
 
+#include "src/ast/access.h"
 #include "src/ast/storage_class.h"
 #include "src/ast/type.h"
 
@@ -31,19 +32,25 @@
   /// @param source the source of this node
   /// @param subtype the pointee type
   /// @param storage_class the storage class of the pointer
+  /// @param access the access control of the pointer
   Pointer(ProgramID program_id,
           const Source& source,
           Type* const subtype,
-          ast::StorageClass storage_class);
+          ast::StorageClass storage_class,
+          ast::Access access);
   /// Move constructor
   Pointer(Pointer&&);
   ~Pointer() override;
 
   /// @returns the pointee type
   Type* type() const { return const_cast<Type*>(subtype_); }
+
   /// @returns the storage class of the pointer
   ast::StorageClass storage_class() const { return storage_class_; }
 
+  /// @returns the access control of the pointer
+  ast::Access access() const { return access_; }
+
   /// @returns the name for this type
   std::string type_name() const override;
 
@@ -60,6 +67,7 @@
  private:
   Type const* const subtype_;
   ast::StorageClass const storage_class_;
+  ast::Access const access_;
 };
 
 }  // namespace ast
diff --git a/src/ast/pointer_test.cc b/src/ast/pointer_test.cc
index d2eaa9e..454b4d7 100644
--- a/src/ast/pointer_test.cc
+++ b/src/ast/pointer_test.cc
@@ -25,27 +25,37 @@
 
 TEST_F(AstPointerTest, Creation) {
   auto* i32 = create<I32>();
-  auto* p = create<Pointer>(i32, ast::StorageClass::kStorage);
+  auto* p = create<Pointer>(i32, ast::StorageClass::kStorage, Access::kRead);
   EXPECT_EQ(p->type(), i32);
   EXPECT_EQ(p->storage_class(), ast::StorageClass::kStorage);
+  EXPECT_EQ(p->access(), Access::kRead);
 }
 
 TEST_F(AstPointerTest, TypeName) {
   auto* i32 = create<I32>();
-  auto* p = create<Pointer>(i32, ast::StorageClass::kWorkgroup);
+  auto* p =
+      create<Pointer>(i32, ast::StorageClass::kWorkgroup, Access::kUndefined);
   EXPECT_EQ(p->type_name(), "__ptr_workgroup__i32");
 }
 
-TEST_F(AstPointerTest, FriendlyNameWithStorageClass) {
+TEST_F(AstPointerTest, TypeNameWithAccess) {
   auto* i32 = create<I32>();
-  auto* p = create<Pointer>(i32, ast::StorageClass::kWorkgroup);
+  auto* p = create<Pointer>(i32, ast::StorageClass::kWorkgroup, Access::kRead);
+  EXPECT_EQ(p->type_name(), "__ptr_workgroup__i32_read");
+}
+
+TEST_F(AstPointerTest, FriendlyName) {
+  auto* i32 = create<I32>();
+  auto* p =
+      create<Pointer>(i32, ast::StorageClass::kWorkgroup, Access::kUndefined);
   EXPECT_EQ(p->FriendlyName(Symbols()), "ptr<workgroup, i32>");
 }
 
-TEST_F(AstPointerTest, FriendlyNameWithoutStorageClass) {
+TEST_F(AstPointerTest, FriendlyNameWithAccess) {
   auto* i32 = create<I32>();
-  auto* p = create<Pointer>(i32, ast::StorageClass::kNone);
-  EXPECT_EQ(p->FriendlyName(Symbols()), "ptr<i32>");
+  auto* p =
+      create<Pointer>(i32, ast::StorageClass::kStorage, Access::kReadWrite);
+  EXPECT_EQ(p->FriendlyName(Symbols()), "ptr<storage, i32, read_write>");
 }
 
 }  // namespace
diff --git a/src/intrinsic_table.cc b/src/intrinsic_table.cc
index 9cdeca7..8c820d5 100644
--- a/src/intrinsic_table.cc
+++ b/src/intrinsic_table.cc
@@ -431,24 +431,30 @@
                                           /* stride_implicit */ 0);
 }
 
-bool match_ptr(const sem::Type* ty, Number& S, const sem::Type*& T) {
+bool match_ptr(const sem::Type* ty, Number& S, const sem::Type*& T, Number& A) {
   if (ty->Is<Any>()) {
     S = Number::any;
     T = ty;
+    A = Number::any;
     return true;
   }
 
   if (auto* p = ty->As<sem::Pointer>()) {
     S = Number(static_cast<uint32_t>(p->StorageClass()));
     T = p->StoreType();
+    A = Number(static_cast<uint32_t>(p->Access()));
     return true;
   }
   return false;
 }
 
-const sem::Pointer* build_ptr(MatchState& state, Number S, const sem::Type* T) {
+const sem::Pointer* build_ptr(MatchState& state,
+                              Number S,
+                              const sem::Type* T,
+                              Number& A) {
   return state.builder.create<sem::Pointer>(
-      T, static_cast<ast::StorageClass>(S.Value()));
+      T, static_cast<ast::StorageClass>(S.Value()),
+      static_cast<ast::Access>(A.Value()));
 }
 
 bool match_sampler(const sem::Type* ty) {
diff --git a/src/intrinsic_table.inl b/src/intrinsic_table.inl
index 4fca42f..f72bb8c 100644
--- a/src/intrinsic_table.inl
+++ b/src/intrinsic_table.inl
@@ -338,7 +338,8 @@
 const sem::Type* Ptr::Match(MatchState& state, const sem::Type* ty) const {
   Number S = Number::invalid;
   const sem::Type* T = nullptr;
-  if (!match_ptr(ty, S, T)) {
+  Number A = Number::invalid;
+  if (!match_ptr(ty, S, T, A)) {
     return nullptr;
   }
   S = state.Num(S);
@@ -349,12 +350,17 @@
   if (T == nullptr) {
     return nullptr;
   }
-  return build_ptr(state, S, T);
+  A = state.Num(A);
+  if (!A.IsValid()) {
+    return nullptr;
+  }
+  return build_ptr(state, S, T, A);
 }
 
 std::string Ptr::String(MatchState& state) const {
   const std::string S = state.NumName();
   const std::string T = state.TypeName();
+  const std::string A = state.NumName();
   std::stringstream ss;
   ss << "ptr<" << T << ">";
   return ss.str();
@@ -1253,6 +1259,7 @@
   OpenTypeMatcher open_type_0_{0};
   OpenNumberMatcher open_number_0_{0};
   OpenNumberMatcher open_number_1_{1};
+  OpenNumberMatcher open_number_2_{2};
   Bool Bool_;
   F32 F32_;
   I32 I32_;
@@ -1336,15 +1343,16 @@
   };
 
   /// The open-numbers, and number matchers
-  NumberMatcher const* const number[8] = {
+  NumberMatcher const* const number[9] = {
     /* [0] */ &open_number_0_,
     /* [1] */ &open_number_1_,
-    /* [2] */ &F32TexelFormat_,
-    /* [3] */ &I32TexelFormat_,
-    /* [4] */ &U32TexelFormat_,
-    /* [5] */ &ReadOrWrite_,
-    /* [6] */ &Write_,
-    /* [7] */ &Read_,
+    /* [2] */ &open_number_2_,
+    /* [3] */ &F32TexelFormat_,
+    /* [4] */ &I32TexelFormat_,
+    /* [5] */ &U32TexelFormat_,
+    /* [6] */ &ReadOrWrite_,
+    /* [7] */ &Write_,
+    /* [8] */ &Read_,
   };
 };
 
@@ -1357,153 +1365,159 @@
   /* [2] */ 8,
   /* [3] */ 0,
   /* [4] */ 0,
-  /* [5] */ 10,
-  /* [6] */ 1,
-  /* [7] */ 8,
-  /* [8] */ 0,
-  /* [9] */ 2,
-  /* [10] */ 9,
-  /* [11] */ 0,
-  /* [12] */ 0,
-  /* [13] */ 2,
-  /* [14] */ 26,
+  /* [5] */ 2,
+  /* [6] */ 10,
+  /* [7] */ 1,
+  /* [8] */ 8,
+  /* [9] */ 0,
+  /* [10] */ 2,
+  /* [11] */ 2,
+  /* [12] */ 9,
+  /* [13] */ 0,
+  /* [14] */ 0,
   /* [15] */ 2,
-  /* [16] */ 6,
-  /* [17] */ 2,
-  /* [18] */ 28,
-  /* [19] */ 0,
-  /* [20] */ 1,
-  /* [21] */ 27,
-  /* [22] */ 0,
+  /* [16] */ 10,
+  /* [17] */ 0,
+  /* [18] */ 0,
+  /* [19] */ 1,
+  /* [20] */ 10,
+  /* [21] */ 0,
+  /* [22] */ 2,
   /* [23] */ 1,
-  /* [24] */ 8,
-  /* [25] */ 0,
-  /* [26] */ 1,
-  /* [27] */ 28,
-  /* [28] */ 4,
-  /* [29] */ 7,
-  /* [30] */ 2,
-  /* [31] */ 26,
-  /* [32] */ 0,
-  /* [33] */ 1,
-  /* [34] */ 25,
+  /* [24] */ 26,
+  /* [25] */ 3,
+  /* [26] */ 7,
+  /* [27] */ 2,
+  /* [28] */ 8,
+  /* [29] */ 0,
+  /* [30] */ 1,
+  /* [31] */ 28,
+  /* [32] */ 5,
+  /* [33] */ 8,
+  /* [34] */ 26,
   /* [35] */ 0,
   /* [36] */ 1,
-  /* [37] */ 27,
-  /* [38] */ 4,
-  /* [39] */ 7,
-  /* [40] */ 3,
-  /* [41] */ 26,
-  /* [42] */ 4,
-  /* [43] */ 7,
-  /* [44] */ 4,
-  /* [45] */ 25,
-  /* [46] */ 4,
-  /* [47] */ 7,
-  /* [48] */ 0,
+  /* [37] */ 25,
+  /* [38] */ 0,
+  /* [39] */ 1,
+  /* [40] */ 27,
+  /* [41] */ 5,
+  /* [42] */ 8,
+  /* [43] */ 26,
+  /* [44] */ 5,
+  /* [45] */ 8,
+  /* [46] */ 25,
+  /* [47] */ 5,
+  /* [48] */ 8,
   /* [49] */ 28,
-  /* [50] */ 3,
-  /* [51] */ 7,
+  /* [50] */ 4,
+  /* [51] */ 8,
   /* [52] */ 27,
-  /* [53] */ 3,
-  /* [54] */ 7,
+  /* [53] */ 4,
+  /* [54] */ 8,
   /* [55] */ 26,
-  /* [56] */ 3,
-  /* [57] */ 7,
+  /* [56] */ 4,
+  /* [57] */ 8,
   /* [58] */ 25,
-  /* [59] */ 3,
-  /* [60] */ 7,
-  /* [61] */ 28,
-  /* [62] */ 2,
-  /* [63] */ 7,
-  /* [64] */ 27,
-  /* [65] */ 2,
-  /* [66] */ 7,
-  /* [67] */ 26,
-  /* [68] */ 2,
-  /* [69] */ 7,
-  /* [70] */ 25,
-  /* [71] */ 2,
-  /* [72] */ 7,
-  /* [73] */ 28,
-  /* [74] */ 4,
-  /* [75] */ 6,
-  /* [76] */ 3,
-  /* [77] */ 10,
-  /* [78] */ 0,
-  /* [79] */ 2,
-  /* [80] */ 27,
-  /* [81] */ 4,
-  /* [82] */ 6,
-  /* [83] */ 26,
-  /* [84] */ 4,
-  /* [85] */ 6,
-  /* [86] */ 10,
-  /* [87] */ 0,
-  /* [88] */ 0,
-  /* [89] */ 25,
-  /* [90] */ 4,
-  /* [91] */ 6,
-  /* [92] */ 28,
-  /* [93] */ 3,
-  /* [94] */ 6,
-  /* [95] */ 27,
-  /* [96] */ 3,
-  /* [97] */ 6,
-  /* [98] */ 26,
-  /* [99] */ 3,
-  /* [100] */ 6,
-  /* [101] */ 25,
-  /* [102] */ 3,
-  /* [103] */ 6,
-  /* [104] */ 28,
-  /* [105] */ 2,
-  /* [106] */ 6,
-  /* [107] */ 25,
-  /* [108] */ 2,
-  /* [109] */ 6,
-  /* [110] */ 27,
-  /* [111] */ 2,
-  /* [112] */ 6,
-  /* [113] */ 5,
-  /* [114] */ 3,
-  /* [115] */ 5,
+  /* [59] */ 4,
+  /* [60] */ 8,
+  /* [61] */ 27,
+  /* [62] */ 0,
+  /* [63] */ 1,
+  /* [64] */ 28,
+  /* [65] */ 3,
+  /* [66] */ 8,
+  /* [67] */ 27,
+  /* [68] */ 3,
+  /* [69] */ 8,
+  /* [70] */ 26,
+  /* [71] */ 3,
+  /* [72] */ 8,
+  /* [73] */ 25,
+  /* [74] */ 3,
+  /* [75] */ 8,
+  /* [76] */ 28,
+  /* [77] */ 0,
+  /* [78] */ 1,
+  /* [79] */ 28,
+  /* [80] */ 5,
+  /* [81] */ 7,
+  /* [82] */ 3,
+  /* [83] */ 27,
+  /* [84] */ 5,
+  /* [85] */ 7,
+  /* [86] */ 4,
+  /* [87] */ 26,
+  /* [88] */ 5,
+  /* [89] */ 7,
+  /* [90] */ 0,
+  /* [91] */ 25,
+  /* [92] */ 5,
+  /* [93] */ 7,
+  /* [94] */ 28,
+  /* [95] */ 4,
+  /* [96] */ 7,
+  /* [97] */ 27,
+  /* [98] */ 4,
+  /* [99] */ 7,
+  /* [100] */ 26,
+  /* [101] */ 4,
+  /* [102] */ 7,
+  /* [103] */ 25,
+  /* [104] */ 4,
+  /* [105] */ 7,
+  /* [106] */ 28,
+  /* [107] */ 3,
+  /* [108] */ 7,
+  /* [109] */ 25,
+  /* [110] */ 3,
+  /* [111] */ 7,
+  /* [112] */ 27,
+  /* [113] */ 3,
+  /* [114] */ 7,
+  /* [115] */ 6,
   /* [116] */ 2,
-  /* [117] */ 19,
-  /* [118] */ 2,
-  /* [119] */ 18,
-  /* [120] */ 2,
-  /* [121] */ 14,
-  /* [122] */ 0,
-  /* [123] */ 17,
+  /* [117] */ 5,
+  /* [118] */ 3,
+  /* [119] */ 6,
+  /* [120] */ 3,
+  /* [121] */ 5,
+  /* [122] */ 2,
+  /* [123] */ 19,
   /* [124] */ 2,
-  /* [125] */ 15,
-  /* [126] */ 0,
-  /* [127] */ 16,
-  /* [128] */ 2,
-  /* [129] */ 16,
-  /* [130] */ 0,
-  /* [131] */ 17,
+  /* [125] */ 18,
+  /* [126] */ 2,
+  /* [127] */ 14,
+  /* [128] */ 0,
+  /* [129] */ 17,
+  /* [130] */ 2,
+  /* [131] */ 15,
   /* [132] */ 0,
-  /* [133] */ 20,
-  /* [134] */ 0,
-  /* [135] */ 15,
-  /* [136] */ 2,
-  /* [137] */ 18,
+  /* [133] */ 16,
+  /* [134] */ 2,
+  /* [135] */ 16,
+  /* [136] */ 0,
+  /* [137] */ 17,
   /* [138] */ 0,
-  /* [139] */ 19,
+  /* [139] */ 20,
   /* [140] */ 0,
-  /* [141] */ 11,
-  /* [142] */ 0,
-  /* [143] */ 14,
-  /* [144] */ 2,
-  /* [145] */ 12,
-  /* [146] */ 22,
-  /* [147] */ 23,
-  /* [148] */ 21,
-  /* [149] */ 24,
-  /* [150] */ 29,
-  /* [151] */ 13,
+  /* [141] */ 15,
+  /* [142] */ 2,
+  /* [143] */ 18,
+  /* [144] */ 0,
+  /* [145] */ 19,
+  /* [146] */ 0,
+  /* [147] */ 11,
+  /* [148] */ 0,
+  /* [149] */ 14,
+  /* [150] */ 2,
+  /* [151] */ 12,
+  /* [152] */ 22,
+  /* [153] */ 23,
+  /* [154] */ 21,
+  /* [155] */ 24,
+  /* [156] */ 29,
+  /* [157] */ 13,
 };
 
 // Assert that the MatcherIndex is big enough to index all the matchers, plus
@@ -1516,1222 +1530,1222 @@
   {
     /* [0] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [1] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [2] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [3] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [4] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [5] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [6] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [7] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [8] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [9] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [10] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [11] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [12] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [13] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [14] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [15] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [16] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [17] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [18] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [19] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [20] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [21] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [22] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [23] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [24] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [25] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [26] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[151],
+    /* matcher indices */ &kMatcherIndices[157],
   },
   {
     /* [27] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [28] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [29] */
     /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [30] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [31] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [32] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [33] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [34] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [35] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [36] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [37] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [38] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [39] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [40] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [41] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [42] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [43] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [44] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [45] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [46] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [47] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [48] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [49] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [50] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [51] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [52] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [53] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [54] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [55] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [56] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[151],
+    /* matcher indices */ &kMatcherIndices[157],
   },
   {
     /* [57] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [58] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [59] */
     /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [60] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [61] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [62] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [63] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [64] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [65] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [66] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [67] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [68] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [69] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [70] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [71] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[151],
+    /* matcher indices */ &kMatcherIndices[157],
   },
   {
     /* [72] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [73] */
     /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [74] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [75] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [76] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [77] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [78] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [79] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [80] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [81] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [82] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [83] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [84] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [85] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [86] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [87] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [88] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [89] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [90] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [91] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [92] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [93] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [94] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [95] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [96] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [97] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [98] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [99] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [100] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [101] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [102] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [103] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [104] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [105] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [106] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [107] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [108] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [109] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [110] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [111] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[151],
+    /* matcher indices */ &kMatcherIndices[157],
   },
   {
     /* [112] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [113] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [114] */
     /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [115] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [116] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [117] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [118] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [119] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [120] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [121] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [122] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [123] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [124] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [125] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [126] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [127] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [128] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [129] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [130] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [131] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [132] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [133] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [134] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [135] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [136] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [137] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [138] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [139] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [140] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* matcher indices */ &kMatcherIndices[125],
   },
   {
     /* [141] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [142] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [143] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [144] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [145] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [146] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [147] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [148] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [149] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [150] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
+    /* matcher indices */ &kMatcherIndices[135],
   },
   {
     /* [151] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [152] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [153] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [154] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [155] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [156] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [157] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [158] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[80],
+    /* matcher indices */ &kMatcherIndices[83],
   },
   {
     /* [159] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [160] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [161] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[43],
+    /* matcher indices */ &kMatcherIndices[85],
   },
   {
     /* [162] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[97],
   },
   {
     /* [163] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [164] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [165] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[39],
+    /* matcher indices */ &kMatcherIndices[81],
   },
   {
     /* [166] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [167] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [168] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [169] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [170] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [171] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [172] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [173] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [174] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [175] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [176] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [177] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [178] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[110],
+    /* matcher indices */ &kMatcherIndices[112],
   },
   {
     /* [179] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [180] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [181] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[29],
+    /* matcher indices */ &kMatcherIndices[26],
   },
   {
     /* [182] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[153],
   },
   {
     /* [183] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[151],
+    /* matcher indices */ &kMatcherIndices[157],
   },
   {
     /* [184] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [185] */
     /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [186] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* matcher indices */ &kMatcherIndices[125],
   },
   {
     /* [187] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [188] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [189] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [190] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [191] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [192] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [193] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [194] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [195] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [196] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [197] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [198] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[153],
   },
   {
     /* [199] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [200] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [201] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [202] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* matcher indices */ &kMatcherIndices[125],
   },
   {
     /* [203] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [204] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [205] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [206] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [207] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[151],
+    /* matcher indices */ &kMatcherIndices[157],
   },
   {
     /* [208] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [209] */
     /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [210] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [211] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [212] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [213] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [214] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [215] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [216] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [217] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [218] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [219] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [220] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [221] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [222] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [223] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [224] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [225] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [226] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [227] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [228] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [229] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [230] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [231] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [232] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [233] */
     /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [234] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [235] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [236] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [237] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [238] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[101],
+    /* matcher indices */ &kMatcherIndices[103],
   },
   {
     /* [239] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [240] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[39],
+    /* matcher indices */ &kMatcherIndices[81],
   },
   {
     /* [241] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [242] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [243] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [244] */
@@ -2746,7 +2760,7 @@
   {
     /* [246] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[24],
+    /* matcher indices */ &kMatcherIndices[28],
   },
   {
     /* [247] */
@@ -2766,242 +2780,242 @@
   {
     /* [250] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [251] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [252] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [253] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [254] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [255] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [256] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[150],
+    /* matcher indices */ &kMatcherIndices[156],
   },
   {
     /* [257] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [258] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [259] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[14],
+    /* matcher indices */ &kMatcherIndices[24],
   },
   {
     /* [260] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [261] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[29],
+    /* matcher indices */ &kMatcherIndices[26],
   },
   {
     /* [262] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[104],
+    /* matcher indices */ &kMatcherIndices[106],
   },
   {
     /* [263] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [264] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[29],
+    /* matcher indices */ &kMatcherIndices[26],
   },
   {
     /* [265] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[92],
+    /* matcher indices */ &kMatcherIndices[94],
   },
   {
     /* [266] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [267] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[39],
+    /* matcher indices */ &kMatcherIndices[81],
   },
   {
     /* [268] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[89],
+    /* matcher indices */ &kMatcherIndices[91],
   },
   {
     /* [269] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [270] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[43],
+    /* matcher indices */ &kMatcherIndices[85],
   },
   {
     /* [271] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[83],
+    /* matcher indices */ &kMatcherIndices[87],
   },
   {
     /* [272] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [273] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[43],
+    /* matcher indices */ &kMatcherIndices[85],
   },
   {
     /* [274] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [275] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [276] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [277] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* matcher indices */ &kMatcherIndices[125],
   },
   {
     /* [278] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [279] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [280] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [281] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [282] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [283] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[73],
+    /* matcher indices */ &kMatcherIndices[79],
   },
   {
     /* [284] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [285] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[43],
+    /* matcher indices */ &kMatcherIndices[85],
   },
   {
     /* [286] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[121],
+    /* matcher indices */ &kMatcherIndices[127],
   },
   {
     /* [287] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [288] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [289] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[125],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [290] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [291] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [292] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* matcher indices */ &kMatcherIndices[137],
   },
   {
     /* [293] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [294] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [295] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[139],
   },
   {
     /* [296] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [297] */
     /* usage */ ParameterUsage::kSampleIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [298] */
@@ -3036,92 +3050,92 @@
   {
     /* [304] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [305] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [306] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [307] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [308] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [309] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [310] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [311] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [312] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [313] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[64],
+    /* matcher indices */ &kMatcherIndices[67],
   },
   {
     /* [314] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [315] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [316] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[153],
   },
   {
     /* [317] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [318] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [319] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [320] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [321] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [322] */
@@ -3131,152 +3145,152 @@
   {
     /* [323] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [324] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [325] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[150],
+    /* matcher indices */ &kMatcherIndices[156],
   },
   {
     /* [326] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [327] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [328] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[149],
   },
   {
     /* [329] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[151],
   },
   {
     /* [330] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [331] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[37],
+    /* matcher indices */ &kMatcherIndices[40],
   },
   {
     /* [332] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [333] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [334] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [335] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [336] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [337] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [338] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [339] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [340] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[107],
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [341] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [342] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[29],
+    /* matcher indices */ &kMatcherIndices[26],
   },
   {
     /* [343] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [344] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [345] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [346] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[98],
+    /* matcher indices */ &kMatcherIndices[100],
   },
   {
     /* [347] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [348] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[39],
+    /* matcher indices */ &kMatcherIndices[81],
   },
   {
     /* [349] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [350] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[5],
+    /* matcher indices */ &kMatcherIndices[6],
   },
   {
     /* [351] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [352] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[77],
+    /* matcher indices */ &kMatcherIndices[20],
   },
   {
     /* [353] */
@@ -3311,42 +3325,42 @@
   {
     /* [359] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [360] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [361] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [362] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [363] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [364] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [365] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [366] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [367] */
@@ -3361,17 +3375,17 @@
   {
     /* [369] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[150],
+    /* matcher indices */ &kMatcherIndices[156],
   },
   {
     /* [370] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [371] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [372] */
@@ -3381,7 +3395,7 @@
   {
     /* [373] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [374] */
@@ -3391,7 +3405,7 @@
   {
     /* [375] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [376] */
@@ -3401,142 +3415,142 @@
   {
     /* [377] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [378] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[86],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [379] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[125],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [380] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [381] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [382] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [383] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [384] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [385] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [386] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [387] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [388] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[115],
   },
   {
     /* [389] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [390] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [391] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [392] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [393] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[70],
+    /* matcher indices */ &kMatcherIndices[73],
   },
   {
     /* [394] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [395] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[67],
+    /* matcher indices */ &kMatcherIndices[70],
   },
   {
     /* [396] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [397] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[61],
+    /* matcher indices */ &kMatcherIndices[64],
   },
   {
     /* [398] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [399] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [400] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [401] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [402] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [403] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[27],
+    /* matcher indices */ &kMatcherIndices[31],
   },
   {
     /* [404] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [405] */
@@ -3546,7 +3560,7 @@
   {
     /* [406] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [407] */
@@ -3556,7 +3570,7 @@
   {
     /* [408] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [409] */
@@ -3566,367 +3580,367 @@
   {
     /* [410] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[75],
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [411] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[45],
+    /* matcher indices */ &kMatcherIndices[46],
   },
   {
     /* [412] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [413] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [414] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [415] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[153],
   },
   {
     /* [416] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [417] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [418] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [419] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [420] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [421] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [422] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [423] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [424] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [425] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* matcher indices */ &kMatcherIndices[137],
   },
   {
     /* [426] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [427] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[41],
+    /* matcher indices */ &kMatcherIndices[43],
   },
   {
     /* [428] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [429] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
+    /* matcher indices */ &kMatcherIndices[135],
   },
   {
     /* [430] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[40],
+    /* matcher indices */ &kMatcherIndices[25],
   },
   {
     /* [431] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[125],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [432] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[125],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [433] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
+    /* matcher indices */ &kMatcherIndices[135],
   },
   {
     /* [434] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[121],
+    /* matcher indices */ &kMatcherIndices[127],
   },
   {
     /* [435] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* matcher indices */ &kMatcherIndices[137],
   },
   {
     /* [436] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[28],
+    /* matcher indices */ &kMatcherIndices[50],
   },
   {
     /* [437] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [438] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[28],
+    /* matcher indices */ &kMatcherIndices[50],
   },
   {
     /* [439] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [440] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[28],
+    /* matcher indices */ &kMatcherIndices[50],
   },
   {
     /* [441] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[139],
   },
   {
     /* [442] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [443] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[28],
+    /* matcher indices */ &kMatcherIndices[50],
   },
   {
     /* [444] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [445] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[28],
+    /* matcher indices */ &kMatcherIndices[50],
   },
   {
     /* [446] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[153],
   },
   {
     /* [447] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [448] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [449] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [450] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[34],
+    /* matcher indices */ &kMatcherIndices[37],
   },
   {
     /* [451] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[31],
+    /* matcher indices */ &kMatcherIndices[34],
   },
   {
     /* [452] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[21],
+    /* matcher indices */ &kMatcherIndices[61],
   },
   {
     /* [453] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[18],
+    /* matcher indices */ &kMatcherIndices[76],
   },
   {
     /* [454] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[150],
+    /* matcher indices */ &kMatcherIndices[156],
   },
   {
     /* [455] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
+    /* matcher indices */ &kMatcherIndices[135],
   },
   {
     /* [456] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [457] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [458] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [459] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[21],
+    /* matcher indices */ &kMatcherIndices[61],
   },
   {
     /* [460] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [461] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
+    /* matcher indices */ &kMatcherIndices[135],
   },
   {
     /* [462] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* matcher indices */ &kMatcherIndices[137],
   },
   {
     /* [463] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [464] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [465] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* matcher indices */ &kMatcherIndices[154],
   },
   {
     /* [466] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[152],
   },
   {
     /* [467] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[153],
   },
   {
     /* [468] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[155],
   },
   {
     /* [469] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[139],
   },
   {
     /* [470] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [471] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [472] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [473] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [474] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [475] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [476] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [477] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [478] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [479] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [480] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [481] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [482] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [483] */
@@ -3941,247 +3955,247 @@
   {
     /* [485] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[29],
+    /* matcher indices */ &kMatcherIndices[26],
   },
   {
     /* [486] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[29],
+    /* matcher indices */ &kMatcherIndices[26],
   },
   {
     /* [487] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [488] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [489] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [490] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [491] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [492] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [493] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [494] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [495] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [496] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [497] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [498] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [499] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [500] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [501] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [502] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [503] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [504] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [505] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [506] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [507] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [508] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [509] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [510] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [511] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [512] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [513] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [514] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [515] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [516] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [517] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [518] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [519] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [520] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [521] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [522] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [523] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [524] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [525] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [526] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [527] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [528] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [529] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [530] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [531] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [532] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [533] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[10],
+    /* matcher indices */ &kMatcherIndices[12],
   },
   {
     /* [534] */
@@ -4196,77 +4210,77 @@
   {
     /* [536] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [537] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [538] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [539] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [540] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [541] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [542] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [543] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [544] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [545] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [546] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[141],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [547] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[24],
+    /* matcher indices */ &kMatcherIndices[28],
   },
   {
     /* [548] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[24],
+    /* matcher indices */ &kMatcherIndices[28],
   },
   {
     /* [549] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[8],
   },
   {
     /* [550] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[9],
+    /* matcher indices */ &kMatcherIndices[5],
   },
   {
     /* [551] */
@@ -4306,24 +4320,29 @@
 constexpr OpenNumberInfo kOpenNumbers[] = {
   {
     /* [0] */
-    /* name */ "F",
-    /* matcher index */ kNoMatcher,
-  },
-  {
-    /* [1] */
-    /* name */ "A",
-    /* matcher index */ 5,
-  },
-  {
-    /* [2] */
     /* name */ "N",
     /* matcher index */ kNoMatcher,
   },
   {
-    /* [3] */
+    /* [1] */
     /* name */ "S",
     /* matcher index */ kNoMatcher,
   },
+  {
+    /* [2] */
+    /* name */ "A",
+    /* matcher index */ kNoMatcher,
+  },
+  {
+    /* [3] */
+    /* name */ "F",
+    /* matcher index */ kNoMatcher,
+  },
+  {
+    /* [4] */
+    /* name */ "A",
+    /* matcher index */ 6,
+  },
 };
 
 constexpr OverloadInfo kOverloads[] = {
@@ -4333,9 +4352,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[434],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4344,9 +4363,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[432],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4355,9 +4374,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[379],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4366,9 +4385,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[433],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4377,9 +4396,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[429],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4388,9 +4407,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[435],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4399,9 +4418,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[425],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4410,9 +4429,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[437],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4421,9 +4440,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[423],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4432,9 +4451,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[439],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4443,9 +4462,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[421],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4454,9 +4473,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[441],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4465,9 +4484,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[442],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4476,9 +4495,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[419],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4487,9 +4506,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[444],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4498,9 +4517,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[417],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4509,9 +4528,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[446],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4520,9 +4539,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[415],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4531,9 +4550,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[448],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4542,9 +4561,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[413],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4553,9 +4572,9 @@
     /* num open types */ 0,
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[0],
+    /* open numbers */ &kOpenNumbers[3],
     /* parameters */ &kParameters[450],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4564,9 +4583,9 @@
     /* num open types */ 0,
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[0],
+    /* open numbers */ &kOpenNumbers[3],
     /* parameters */ &kParameters[451],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4575,9 +4594,9 @@
     /* num open types */ 0,
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[0],
+    /* open numbers */ &kOpenNumbers[3],
     /* parameters */ &kParameters[452],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4586,9 +4605,9 @@
     /* num open types */ 0,
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[0],
+    /* open numbers */ &kOpenNumbers[3],
     /* parameters */ &kParameters[453],
-    /* return matcher indices */ &kMatcherIndices[75],
+    /* return matcher indices */ &kMatcherIndices[119],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4597,9 +4616,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[454],
-    /* return matcher indices */ &kMatcherIndices[113],
+    /* return matcher indices */ &kMatcherIndices[117],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4608,9 +4627,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[286],
-    /* return matcher indices */ &kMatcherIndices[47],
+    /* return matcher indices */ &kMatcherIndices[89],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4619,9 +4638,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[289],
-    /* return matcher indices */ &kMatcherIndices[47],
+    /* return matcher indices */ &kMatcherIndices[89],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4630,9 +4649,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[150],
-    /* return matcher indices */ &kMatcherIndices[47],
+    /* return matcher indices */ &kMatcherIndices[89],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4641,9 +4660,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[292],
-    /* return matcher indices */ &kMatcherIndices[47],
+    /* return matcher indices */ &kMatcherIndices[89],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4652,9 +4671,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[295],
-    /* return matcher indices */ &kMatcherIndices[47],
+    /* return matcher indices */ &kMatcherIndices[89],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4663,9 +4682,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[304],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4674,9 +4693,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[194],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4685,9 +4704,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[393],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4696,9 +4715,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[395],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4707,9 +4726,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[313],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4718,9 +4737,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[397],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4729,9 +4748,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[405],
-    /* return matcher indices */ &kMatcherIndices[39],
+    /* return matcher indices */ &kMatcherIndices[81],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4740,9 +4759,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[407],
-    /* return matcher indices */ &kMatcherIndices[39],
+    /* return matcher indices */ &kMatcherIndices[81],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4751,9 +4770,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[322],
-    /* return matcher indices */ &kMatcherIndices[39],
+    /* return matcher indices */ &kMatcherIndices[81],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4762,9 +4781,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[409],
-    /* return matcher indices */ &kMatcherIndices[39],
+    /* return matcher indices */ &kMatcherIndices[81],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4773,9 +4792,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[411],
-    /* return matcher indices */ &kMatcherIndices[43],
+    /* return matcher indices */ &kMatcherIndices[85],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4784,9 +4803,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[427],
-    /* return matcher indices */ &kMatcherIndices[43],
+    /* return matcher indices */ &kMatcherIndices[85],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4795,9 +4814,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[331],
-    /* return matcher indices */ &kMatcherIndices[43],
+    /* return matcher indices */ &kMatcherIndices[85],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4806,9 +4825,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[403],
-    /* return matcher indices */ &kMatcherIndices[43],
+    /* return matcher indices */ &kMatcherIndices[85],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4817,9 +4836,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[369],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -4828,9 +4847,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[328],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4839,9 +4858,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[319],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4850,9 +4869,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[234],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4861,9 +4880,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[214],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4872,9 +4891,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[60],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4883,9 +4902,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[307],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4894,9 +4913,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[170],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4905,9 +4924,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[277],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4916,9 +4935,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[154],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4927,9 +4946,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[274],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4938,9 +4957,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[166],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4949,9 +4968,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[190],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4960,9 +4979,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[85],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4971,9 +4990,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[316],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4982,9 +5001,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[226],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -4993,9 +5012,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[325],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5004,9 +5023,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[174],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5015,9 +5034,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[100],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5026,9 +5045,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[90],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5037,9 +5056,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[43],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5048,9 +5067,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[218],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5059,9 +5078,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[135],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5070,9 +5089,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[202],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5081,9 +5100,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[95],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5092,9 +5111,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[222],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5103,9 +5122,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[125],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5114,9 +5133,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[65],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5125,9 +5144,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[37],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5136,9 +5155,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[198],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5147,9 +5166,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[75],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5158,9 +5177,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[256],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5169,7 +5188,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[340],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5180,7 +5199,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[259],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5191,7 +5210,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[178],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5202,7 +5221,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[262],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5213,7 +5232,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[238],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5224,7 +5243,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[346],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5235,7 +5254,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[162],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5246,7 +5265,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[265],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5257,7 +5276,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[268],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5268,7 +5287,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[271],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5279,7 +5298,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[158],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5290,7 +5309,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[283],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5301,9 +5320,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[431],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5312,9 +5331,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[461],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5323,9 +5342,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[462],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5334,9 +5353,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[463],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5345,9 +5364,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[464],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5356,9 +5375,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[465],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5367,9 +5386,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[466],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5378,9 +5397,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[467],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5389,9 +5408,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[468],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5400,9 +5419,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[230],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5411,9 +5430,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[105],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5422,9 +5441,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[130],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5433,9 +5452,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[49],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5444,9 +5463,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[210],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5455,9 +5474,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[80],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5466,9 +5485,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[186],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5477,9 +5496,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[120],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5488,9 +5507,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[115],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5499,9 +5518,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[7],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5510,9 +5529,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[19],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5521,9 +5540,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[0],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5532,9 +5551,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[145],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5543,9 +5562,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[31],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5554,9 +5573,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[140],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5565,9 +5584,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[13],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5576,9 +5595,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[206],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5587,9 +5606,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[70],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5598,9 +5617,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[55],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5609,9 +5628,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[25],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5620,9 +5639,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[182],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5631,9 +5650,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[110],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5642,9 +5661,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[455],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5653,9 +5672,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[456],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5664,9 +5683,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[457],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5675,9 +5694,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[458],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5686,9 +5705,9 @@
     /* num open types */ 0,
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[0],
+    /* open numbers */ &kOpenNumbers[3],
     /* parameters */ &kParameters[459],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5697,9 +5716,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[391],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5708,9 +5727,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[389],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5719,9 +5738,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[537],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5730,9 +5749,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[536],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5741,7 +5760,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[535],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5752,7 +5771,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[534],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5763,9 +5782,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[539],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5774,9 +5793,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[538],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5785,9 +5804,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[399],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5796,9 +5815,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[401],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5807,9 +5826,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[385],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5818,9 +5837,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[383],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5829,7 +5848,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[301],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5840,7 +5859,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[298],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -5851,9 +5870,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[532],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5862,9 +5881,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[531],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5873,9 +5892,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[530],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5884,9 +5903,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[529],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5895,9 +5914,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[528],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5906,9 +5925,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[527],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5917,9 +5936,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[526],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5928,9 +5947,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[525],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5939,9 +5958,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[524],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5950,9 +5969,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[523],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5961,9 +5980,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[522],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5972,9 +5991,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[521],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
   },
   {
@@ -5983,9 +6002,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[520],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -5994,9 +6013,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[519],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6005,9 +6024,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[518],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6016,9 +6035,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[517],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6027,9 +6046,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[253],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6038,9 +6057,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[250],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6049,9 +6068,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[516],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6060,9 +6079,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[515],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6071,9 +6090,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[280],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6082,9 +6101,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[241],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6093,9 +6112,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[514],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6104,31 +6123,31 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[513],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
     /* [162] */
     /* num parameters */ 2,
     /* num open types */ 1,
-    /* num open numbers */ 1,
+    /* num open numbers */ 2,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[3],
+    /* open numbers */ &kOpenNumbers[1],
     /* parameters */ &kParameters[377],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
     /* [163] */
     /* num parameters */ 2,
     /* num open types */ 1,
-    /* num open numbers */ 2,
+    /* num open numbers */ 3,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[375],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6137,9 +6156,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[512],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6148,9 +6167,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[511],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6159,9 +6178,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[510],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6170,9 +6189,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[509],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6181,9 +6200,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[508],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6192,9 +6211,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[507],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6203,9 +6222,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[506],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6214,9 +6233,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[505],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6225,7 +6244,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[504],
     /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6236,9 +6255,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[503],
-    /* return matcher indices */ &kMatcherIndices[24],
+    /* return matcher indices */ &kMatcherIndices[28],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6247,7 +6266,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[502],
     /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6258,9 +6277,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[501],
-    /* return matcher indices */ &kMatcherIndices[24],
+    /* return matcher indices */ &kMatcherIndices[28],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6269,7 +6288,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[500],
     /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6280,9 +6299,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[499],
-    /* return matcher indices */ &kMatcherIndices[24],
+    /* return matcher indices */ &kMatcherIndices[28],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6291,7 +6310,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[498],
     /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6302,9 +6321,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[497],
-    /* return matcher indices */ &kMatcherIndices[24],
+    /* return matcher indices */ &kMatcherIndices[28],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6313,9 +6332,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[373],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6324,9 +6343,9 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[371],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6335,9 +6354,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[496],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6346,9 +6365,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[495],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6357,9 +6376,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[494],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6368,9 +6387,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[493],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6379,9 +6398,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[492],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6390,9 +6409,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[491],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6401,9 +6420,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[541],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6412,9 +6431,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[540],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6423,7 +6442,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[355],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6434,7 +6453,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[353],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6445,9 +6464,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[334],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6456,31 +6475,31 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[337],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
     /* [194] */
     /* num parameters */ 2,
     /* num open types */ 0,
-    /* num open numbers */ 1,
+    /* num open numbers */ 2,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[3],
+    /* open numbers */ &kOpenNumbers[1],
     /* parameters */ &kParameters[351],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
     /* [195] */
     /* num parameters */ 2,
     /* num open types */ 0,
-    /* num open numbers */ 2,
+    /* num open numbers */ 3,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[349],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6489,9 +6508,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[543],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6500,9 +6519,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[542],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6511,9 +6530,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[474],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6522,9 +6541,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[473],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6533,9 +6552,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[545],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6544,9 +6563,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[544],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6555,9 +6574,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[449],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6566,9 +6585,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[447],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6577,9 +6596,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[470],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6588,9 +6607,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[460],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6599,9 +6618,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[472],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6610,9 +6629,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[471],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6621,9 +6640,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[359],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6632,9 +6651,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[361],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6643,9 +6662,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[363],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6654,9 +6673,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[365],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6665,9 +6684,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[550],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6676,9 +6695,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[549],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6687,9 +6706,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[482],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6698,9 +6717,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[481],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6709,7 +6728,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[3],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[247],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6720,7 +6739,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[3],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[244],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6731,9 +6750,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[480],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6742,9 +6761,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[479],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6753,9 +6772,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[478],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6764,9 +6783,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[477],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6775,9 +6794,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[476],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6786,9 +6805,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[475],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6797,9 +6816,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[310],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6808,9 +6827,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[343],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6819,7 +6838,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[484],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6830,7 +6849,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[483],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6841,7 +6860,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[367],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6852,7 +6871,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[357],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6863,7 +6882,7 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[552],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6874,7 +6893,7 @@
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[551],
     /* return matcher indices */ &kMatcherIndices[2],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -6885,9 +6904,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[488],
-    /* return matcher indices */ &kMatcherIndices[28],
+    /* return matcher indices */ &kMatcherIndices[50],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6896,9 +6915,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[486],
-    /* return matcher indices */ &kMatcherIndices[28],
+    /* return matcher indices */ &kMatcherIndices[50],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6907,9 +6926,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[487],
-    /* return matcher indices */ &kMatcherIndices[28],
+    /* return matcher indices */ &kMatcherIndices[50],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6918,9 +6937,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[445],
-    /* return matcher indices */ &kMatcherIndices[115],
+    /* return matcher indices */ &kMatcherIndices[121],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6929,9 +6948,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[443],
-    /* return matcher indices */ &kMatcherIndices[115],
+    /* return matcher indices */ &kMatcherIndices[121],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6940,9 +6959,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[440],
-    /* return matcher indices */ &kMatcherIndices[115],
+    /* return matcher indices */ &kMatcherIndices[121],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6951,9 +6970,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[438],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6962,9 +6981,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[436],
-    /* return matcher indices */ &kMatcherIndices[29],
+    /* return matcher indices */ &kMatcherIndices[26],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6973,7 +6992,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[553],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kCompute),
@@ -6984,9 +7003,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[485],
-    /* return matcher indices */ &kMatcherIndices[28],
+    /* return matcher indices */ &kMatcherIndices[50],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -6995,9 +7014,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[489],
-    /* return matcher indices */ &kMatcherIndices[28],
+    /* return matcher indices */ &kMatcherIndices[50],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7006,9 +7025,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[490],
-    /* return matcher indices */ &kMatcherIndices[7],
+    /* return matcher indices */ &kMatcherIndices[8],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7017,9 +7036,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[469],
-    /* return matcher indices */ &kMatcherIndices[40],
+    /* return matcher indices */ &kMatcherIndices[25],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7028,9 +7047,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[381],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7039,9 +7058,9 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[533],
-    /* return matcher indices */ &kMatcherIndices[9],
+    /* return matcher indices */ &kMatcherIndices[5],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7050,9 +7069,9 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[387],
-    /* return matcher indices */ &kMatcherIndices[16],
+    /* return matcher indices */ &kMatcherIndices[115],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7061,9 +7080,9 @@
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[2],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[546],
-    /* return matcher indices */ &kMatcherIndices[28],
+    /* return matcher indices */ &kMatcherIndices[50],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
   },
   {
@@ -7072,7 +7091,7 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[547],
     /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -7083,7 +7102,7 @@
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[2],
+    /* open numbers */ &kOpenNumbers[0],
     /* parameters */ &kParameters[548],
     /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
@@ -7094,7 +7113,7 @@
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
-    /* open numbers */ &kOpenNumbers[4],
+    /* open numbers */ &kOpenNumbers[5],
     /* parameters */ &kParameters[553],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kCompute),
@@ -7301,8 +7320,8 @@
   },
   {
     /* [29] */
-    /* fn frexp<T : iu32, S : storage_class>(f32, ptr<S, T>) -> f32 */
-    /* fn frexp<N : num, T : iu32, S : storage_class>(vec<N, f32>, ptr<S, vec<N, T>>) -> vec<N, f32> */
+    /* fn frexp<T : iu32, S : storage_class, A : access>(f32, ptr<S, T, A>) -> f32 */
+    /* fn frexp<N : num, T : iu32, S : storage_class, A : access>(vec<N, f32>, ptr<S, vec<N, T>, A>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[162],
   },
@@ -7413,8 +7432,8 @@
   },
   {
     /* [45] */
-    /* fn modf<S : storage_class>(f32, ptr<S, f32>) -> f32 */
-    /* fn modf<N : num, S : storage_class>(vec<N, f32>, ptr<S, vec<N, f32>>) -> vec<N, f32> */
+    /* fn modf<S : storage_class, A : access>(f32, ptr<S, f32, A>) -> f32 */
+    /* fn modf<N : num, S : storage_class, A : access>(vec<N, f32>, ptr<S, vec<N, f32>, A>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[194],
   },
diff --git a/src/intrinsic_table_test.cc b/src/intrinsic_table_test.cc
index f6b9949..829c415 100644
--- a/src/intrinsic_table_test.cc
+++ b/src/intrinsic_table_test.cc
@@ -196,7 +196,8 @@
 
 TEST_F(IntrinsicTableTest, MatchPointer) {
   auto* f32 = create<sem::F32>();
-  auto* ptr = create<sem::Pointer>(f32, ast::StorageClass::kNone);
+  auto* ptr = create<sem::Pointer>(f32, ast::StorageClass::kFunction,
+                                   ast::Access::kReadWrite);
   auto* result = table->Lookup(IntrinsicType::kModf, {f32, ptr}, Source{});
   ASSERT_NE(result, nullptr) << Diagnostics().str();
   ASSERT_EQ(Diagnostics().str(), "");
@@ -386,9 +387,11 @@
 
 TEST_F(IntrinsicTableTest, ImplicitLoadOnReference) {
   auto* f32 = create<sem::F32>();
-  auto* result = table->Lookup(
-      IntrinsicType::kCos,
-      {create<sem::Reference>(f32, ast::StorageClass::kNone)}, Source{});
+  auto* result =
+      table->Lookup(IntrinsicType::kCos,
+                    {create<sem::Reference>(f32, ast::StorageClass::kFunction,
+                                            ast::Access::kReadWrite)},
+                    Source{});
   ASSERT_NE(result, nullptr) << Diagnostics().str();
   ASSERT_EQ(Diagnostics().str(), "");
   EXPECT_THAT(result->Type(), IntrinsicType::kCos);
diff --git a/src/intrinsics.def b/src/intrinsics.def
index 955b33f..04089a9 100644
--- a/src/intrinsics.def
+++ b/src/intrinsics.def
@@ -74,7 +74,7 @@
 type vec4<T>
 [[display("vec{N}<{T}>")]]     type vec<N: num, T>
 [[display("mat{N}x{M}<{T}>")]] type mat<N: num, M: num, T>
-[[display("ptr<{T}>")]]        type ptr<S: storage_class, T> // TODO(crbug.com/tint/846): Add access control
+[[display("ptr<{T}>")]]        type ptr<S: storage_class, T, A: access>
 type array<T>
 type sampler
 type sampler_comparison
@@ -305,8 +305,8 @@
 fn fma<N: num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32>
 fn fract(f32) -> f32
 fn fract<N: num>(vec<N, f32>) -> vec<N, f32>
-fn frexp<T: iu32, S: storage_class>(f32, ptr<S, T>) -> f32
-fn frexp<N: num, T: iu32, S: storage_class>(vec<N, f32>, ptr<S, vec<N, T>>) -> vec<N, f32>
+fn frexp<T: iu32, S: storage_class, A: access>(f32, ptr<S, T, A>) -> f32
+fn frexp<N: num, T: iu32, S: storage_class, A: access>(vec<N, f32>, ptr<S, vec<N, T>, A>) -> vec<N, f32>
 fn fwidth(f32) -> f32
 fn fwidth<N: num>(vec<N, f32>) -> vec<N, f32>
 fn fwidthCoarse(f32) -> f32
@@ -337,8 +337,8 @@
 fn min<N: num, T: fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T>
 fn mix(f32, f32, f32) -> f32
 fn mix<N: num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32>
-fn modf<S: storage_class>(f32, ptr<S, f32>) -> f32
-fn modf<N: num, S: storage_class>(vec<N, f32>, ptr<S, vec<N, f32>>) -> vec<N, f32>
+fn modf<S: storage_class, A: access>(f32, ptr<S, f32, A>) -> f32
+fn modf<N: num, S: storage_class, A: access>(vec<N, f32>, ptr<S, vec<N, f32>, A>) -> vec<N, f32>
 fn normalize<N: num>(vec<N, f32>) -> vec<N, f32>
 fn pack2x16float(vec2<f32>) -> u32
 fn pack2x16snorm(vec2<f32>) -> u32
diff --git a/src/program_builder.h b/src/program_builder.h
index 371ab4d..55995b5 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -712,29 +712,35 @@
 
     /// @param type the type of the pointer
     /// @param storage_class the storage class of the pointer
+    /// @param access the optional access control of the pointer
     /// @return the pointer to `type` with the given ast::StorageClass
     ast::Pointer* pointer(ast::Type* type,
-                          ast::StorageClass storage_class) const {
+                          ast::StorageClass storage_class,
+                          ast::Access access = ast::Access::kUndefined) const {
       type = MaybeCreateTypename(type);
-      return builder->create<ast::Pointer>(type, storage_class);
+      return builder->create<ast::Pointer>(type, storage_class, access);
     }
 
     /// @param source the Source of the node
     /// @param type the type of the pointer
     /// @param storage_class the storage class of the pointer
+    /// @param access the optional access control of the pointer
     /// @return the pointer to `type` with the given ast::StorageClass
     ast::Pointer* pointer(const Source& source,
                           ast::Type* type,
-                          ast::StorageClass storage_class) const {
+                          ast::StorageClass storage_class,
+                          ast::Access access = ast::Access::kUndefined) const {
       type = MaybeCreateTypename(type);
-      return builder->create<ast::Pointer>(source, type, storage_class);
+      return builder->create<ast::Pointer>(source, type, storage_class, access);
     }
 
     /// @param storage_class the storage class of the pointer
+    /// @param access the optional access control of the pointer
     /// @return the pointer to type `T` with the given ast::StorageClass.
     template <typename T>
-    ast::Pointer* pointer(ast::StorageClass storage_class) const {
-      return pointer(Of<T>(), storage_class);
+    ast::Pointer* pointer(ast::StorageClass storage_class,
+                          ast::Access access = ast::Access::kUndefined) const {
+      return pointer(Of<T>(), storage_class, access);
     }
 
     /// @param kind the kind of sampler
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index a45fe37..6d625fd 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -971,7 +971,7 @@
   if (ident.value == kReadWriteAccess)
     return {ast::Access::kReadWrite, ident.source};
 
-  return add_error(ident.source, "invalid value for access decoration");
+  return add_error(ident.source, "invalid value for access control");
 }
 
 // variable_qualifier
@@ -1045,7 +1045,7 @@
 //   | VEC2 LESS_THAN type_decl GREATER_THAN
 //   | VEC3 LESS_THAN type_decl GREATER_THAN
 //   | VEC4 LESS_THAN type_decl GREATER_THAN
-//   | PTR LESS_THAN storage_class, type_decl GREATER_THAN
+//   | PTR LESS_THAN storage_class, type_decl (COMMA access_mode)? GREATER_THAN
 //   | array_decoration_list* ARRAY LESS_THAN type_decl COMMA
 //          INT_LITERAL GREATER_THAN
 //   | array_decoration_list* ARRAY LESS_THAN type_decl
@@ -1142,20 +1142,32 @@
 Expect<ast::Type*> ParserImpl::expect_type_decl_pointer(Token t) {
   const char* use = "ptr declaration";
 
-  ast::StorageClass storage_class = ast::StorageClass::kNone;
+  auto storage_class = ast::StorageClass::kNone;
+  auto access = ast::Access::kUndefined;
 
   auto subtype = expect_lt_gt_block(use, [&]() -> Expect<ast::Type*> {
     auto sc = expect_storage_class(use);
-    if (sc.errored)
+    if (sc.errored) {
       return Failure::kErrored;
+    }
     storage_class = sc.value;
 
-    if (!expect(use, Token::Type::kComma))
+    if (!expect(use, Token::Type::kComma)) {
       return Failure::kErrored;
+    }
 
     auto type = expect_type(use);
-    if (type.errored)
+    if (type.errored) {
       return Failure::kErrored;
+    }
+
+    if (match(Token::Type::kComma)) {
+      auto ac = expect_access("access control");
+      if (ac.errored) {
+        return Failure::kErrored;
+      }
+      access = ac.value;
+    }
 
     return type.value;
   });
@@ -1165,7 +1177,7 @@
   }
 
   return builder_.ty.pointer(make_source_range_from(t.source()), subtype.value,
-                             storage_class);
+                             storage_class, access);
 }
 
 Expect<ast::Type*> ParserImpl::expect_type_decl_vector(Token t) {
diff --git a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
index 76a0528..b36169a 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -314,7 +314,7 @@
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
-  EXPECT_EQ(p->error(), "1:30: invalid value for access decoration");
+  EXPECT_EQ(p->error(), "1:30: invalid value for access control");
 }
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_MissingType) {
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc
index 295106f..fa44edf 100644
--- a/src/reader/wgsl/parser_impl_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -223,6 +223,22 @@
   EXPECT_EQ(t.value->source().range, (Source::Range{{1u, 1u}, {1u, 19u}}));
 }
 
+TEST_F(ParserImplTest, TypeDecl_Ptr_WithAccess) {
+  auto p = parser("ptr<function, f32, read>");
+  auto t = p->type_decl();
+  EXPECT_TRUE(t.matched);
+  EXPECT_FALSE(t.errored);
+  ASSERT_NE(t.value, nullptr) << p->error();
+  ASSERT_FALSE(p->has_error());
+  ASSERT_TRUE(t.value->Is<ast::Pointer>());
+
+  auto* ptr = t.value->As<ast::Pointer>();
+  ASSERT_TRUE(ptr->type()->Is<ast::F32>());
+  ASSERT_EQ(ptr->storage_class(), ast::StorageClass::kFunction);
+  ASSERT_EQ(ptr->access(), ast::Access::kRead);
+  EXPECT_EQ(t.value->source().range, (Source::Range{{1u, 1u}, {1u, 25u}}));
+}
+
 TEST_F(ParserImplTest, TypeDecl_Ptr_ToVec) {
   auto p = parser("ptr<function, vec2<f32>>");
   auto t = p->type_decl();
@@ -252,7 +268,7 @@
   ASSERT_EQ(p->error(), "1:5: expected '<' for ptr declaration");
 }
 
-TEST_F(ParserImplTest, TypeDecl_Ptr_MissingGreaterThan) {
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingGreaterThanAfterType) {
   auto p = parser("ptr<function, f32");
   auto t = p->type_decl();
   EXPECT_TRUE(t.errored);
@@ -262,7 +278,17 @@
   ASSERT_EQ(p->error(), "1:18: expected '>' for ptr declaration");
 }
 
-TEST_F(ParserImplTest, TypeDecl_Ptr_MissingComma) {
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingGreaterThanAfterAccess) {
+  auto p = parser("ptr<function, f32, read");
+  auto t = p->type_decl();
+  EXPECT_TRUE(t.errored);
+  EXPECT_FALSE(t.matched);
+  ASSERT_EQ(t.value, nullptr);
+  ASSERT_TRUE(p->has_error());
+  ASSERT_EQ(p->error(), "1:24: expected '>' for ptr declaration");
+}
+
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingCommaAfterStorageClass) {
   auto p = parser("ptr<function f32>");
   auto t = p->type_decl();
   EXPECT_TRUE(t.errored);
@@ -272,18 +298,18 @@
   ASSERT_EQ(p->error(), "1:14: expected ',' for ptr declaration");
 }
 
-TEST_F(ParserImplTest, TypeDecl_Ptr_MissingStorageClass) {
-  auto p = parser("ptr<, f32>");
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingCommaAfterAccess) {
+  auto p = parser("ptr<function, f32 read>");
   auto t = p->type_decl();
   EXPECT_TRUE(t.errored);
   EXPECT_FALSE(t.matched);
   ASSERT_EQ(t.value, nullptr);
   ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(p->error(), "1:5: invalid storage class for ptr declaration");
+  ASSERT_EQ(p->error(), "1:19: expected '>' for ptr declaration");
 }
 
-TEST_F(ParserImplTest, TypeDecl_Ptr_MissingParams) {
-  auto p = parser("ptr<>");
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingStorageClass) {
+  auto p = parser("ptr<, f32>");
   auto t = p->type_decl();
   EXPECT_TRUE(t.errored);
   EXPECT_FALSE(t.matched);
@@ -302,6 +328,26 @@
   ASSERT_EQ(p->error(), "1:14: invalid type for ptr declaration");
 }
 
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingAccess) {
+  auto p = parser("ptr<function, i32, >");
+  auto t = p->type_decl();
+  EXPECT_TRUE(t.errored);
+  EXPECT_FALSE(t.matched);
+  ASSERT_EQ(t.value, nullptr);
+  ASSERT_TRUE(p->has_error());
+  ASSERT_EQ(p->error(), "1:20: expected identifier for access control");
+}
+
+TEST_F(ParserImplTest, TypeDecl_Ptr_MissingParams) {
+  auto p = parser("ptr<>");
+  auto t = p->type_decl();
+  EXPECT_TRUE(t.errored);
+  EXPECT_FALSE(t.matched);
+  ASSERT_EQ(t.value, nullptr);
+  ASSERT_TRUE(p->has_error());
+  ASSERT_EQ(p->error(), "1:5: invalid storage class for ptr declaration");
+}
+
 TEST_F(ParserImplTest, TypeDecl_Ptr_BadStorageClass) {
   auto p = parser("ptr<unknown, f32>");
   auto t = p->type_decl();
@@ -322,6 +368,16 @@
   ASSERT_EQ(p->error(), "1:15: unknown constructed type 'unknown'");
 }
 
+TEST_F(ParserImplTest, TypeDecl_Ptr_BadAccess) {
+  auto p = parser("ptr<function, i32, unknown>");
+  auto t = p->type_decl();
+  EXPECT_TRUE(t.errored);
+  EXPECT_FALSE(t.matched);
+  ASSERT_EQ(t.value, nullptr);
+  ASSERT_TRUE(p->has_error());
+  ASSERT_EQ(p->error(), "1:20: invalid value for access control");
+}
+
 TEST_F(ParserImplTest, TypeDecl_Array) {
   auto p = parser("array<f32, 5>");
   auto t = p->type_decl();
diff --git a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
index 59b8b83..541df21 100644
--- a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
@@ -234,7 +234,7 @@
   auto decl = p->expect_variable_ident_decl("test");
   ASSERT_TRUE(p->has_error());
   ASSERT_TRUE(decl.errored);
-  ASSERT_EQ(p->error(), "1:19: invalid value for access decoration");
+  ASSERT_EQ(p->error(), "1:19: invalid value for access control");
 }
 
 // TODO(crbug.com/tint/846): Remove
diff --git a/src/resolver/intrinsic_test.cc b/src/resolver/intrinsic_test.cc
index 39d1b18..35d1bf0 100644
--- a/src/resolver/intrinsic_test.cc
+++ b/src/resolver/intrinsic_test.cc
@@ -849,12 +849,14 @@
 
   EXPECT_FALSE(r()->Resolve());
 
-  EXPECT_EQ(r()->error(),
-            "error: no matching call to frexp(i32, ptr<workgroup, i32>)\n\n"
-            "2 candidate functions:\n"
-            "  frexp(f32, ptr<T>) -> f32  where: T is i32 or u32\n"
-            "  frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32>  "
-            "where: T is i32 or u32\n");
+  EXPECT_EQ(
+      r()->error(),
+      R"(error: no matching call to frexp(i32, ptr<workgroup, i32, read_write>)
+
+2 candidate functions:
+  frexp(f32, ptr<T>) -> f32  where: T is i32 or u32
+  frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32>  where: T is i32 or u32
+)");
 }
 
 TEST_F(ResolverIntrinsicDataTest, Frexp_Error_SecondParamFloatPtr) {
@@ -864,12 +866,14 @@
 
   EXPECT_FALSE(r()->Resolve());
 
-  EXPECT_EQ(r()->error(),
-            "error: no matching call to frexp(f32, ptr<workgroup, f32>)\n\n"
-            "2 candidate functions:\n"
-            "  frexp(f32, ptr<T>) -> f32  where: T is i32 or u32\n"
-            "  frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32>  "
-            "where: T is i32 or u32\n");
+  EXPECT_EQ(
+      r()->error(),
+      R"(error: no matching call to frexp(f32, ptr<workgroup, f32, read_write>)
+
+2 candidate functions:
+  frexp(f32, ptr<T>) -> f32  where: T is i32 or u32
+  frexp(vecN<f32>, ptr<vecN<T>>) -> vecN<f32>  where: T is i32 or u32
+)");
 }
 
 TEST_F(ResolverIntrinsicDataTest, Frexp_Error_SecondParamNotAPointer) {
@@ -895,7 +899,7 @@
 
   EXPECT_EQ(
       r()->error(),
-      R"(error: no matching call to frexp(vec2<f32>, ptr<workgroup, vec4<i32>>)
+      R"(error: no matching call to frexp(vec2<f32>, ptr<workgroup, vec4<i32>, read_write>)
 
 2 candidate functions:
   frexp(f32, ptr<T>) -> f32  where: T is i32 or u32
@@ -933,11 +937,14 @@
 
   EXPECT_FALSE(r()->Resolve());
 
-  EXPECT_EQ(r()->error(),
-            "error: no matching call to modf(i32, ptr<workgroup, f32>)\n\n"
-            "2 candidate functions:\n"
-            "  modf(f32, ptr<f32>) -> f32\n"
-            "  modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>\n");
+  EXPECT_EQ(
+      r()->error(),
+      R"(error: no matching call to modf(i32, ptr<workgroup, f32, read_write>)
+
+2 candidate functions:
+  modf(f32, ptr<f32>) -> f32
+  modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>
+)");
 }
 
 TEST_F(ResolverIntrinsicDataTest, Modf_Error_SecondParamIntPtr) {
@@ -947,11 +954,14 @@
 
   EXPECT_FALSE(r()->Resolve());
 
-  EXPECT_EQ(r()->error(),
-            "error: no matching call to modf(f32, ptr<workgroup, i32>)\n\n"
-            "2 candidate functions:\n"
-            "  modf(f32, ptr<f32>) -> f32\n"
-            "  modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>\n");
+  EXPECT_EQ(
+      r()->error(),
+      R"(error: no matching call to modf(f32, ptr<workgroup, i32, read_write>)
+
+2 candidate functions:
+  modf(f32, ptr<f32>) -> f32
+  modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>
+)");
 }
 
 TEST_F(ResolverIntrinsicDataTest, Modf_Error_SecondParamNotAPointer) {
@@ -976,7 +986,7 @@
 
   EXPECT_EQ(
       r()->error(),
-      R"(error: no matching call to modf(vec2<f32>, ptr<workgroup, vec4<f32>>)
+      R"(error: no matching call to modf(vec2<f32>, ptr<workgroup, vec4<f32>, read_write>)
 
 2 candidate functions:
   modf(vecN<f32>, ptr<vecN<f32>>) -> vecN<f32>
diff --git a/src/resolver/is_host_shareable_test.cc b/src/resolver/is_host_shareable_test.cc
index d3c7f17..cb8d2d8 100644
--- a/src/resolver/is_host_shareable_test.cc
+++ b/src/resolver/is_host_shareable_test.cc
@@ -87,8 +87,8 @@
 }
 
 TEST_F(ResolverIsHostShareable, Pointer) {
-  auto* ptr =
-      create<sem::Pointer>(create<sem::I32>(), ast::StorageClass::kPrivate);
+  auto* ptr = create<sem::Pointer>(
+      create<sem::I32>(), ast::StorageClass::kPrivate, ast::Access::kReadWrite);
   EXPECT_FALSE(r()->IsHostShareable(ptr));
 }
 
diff --git a/src/resolver/is_storeable_test.cc b/src/resolver/is_storeable_test.cc
index 084deb4..209460c 100644
--- a/src/resolver/is_storeable_test.cc
+++ b/src/resolver/is_storeable_test.cc
@@ -62,8 +62,8 @@
 }
 
 TEST_F(ResolverIsStorableTest, Pointer) {
-  auto* ptr =
-      create<sem::Pointer>(create<sem::I32>(), ast::StorageClass::kPrivate);
+  auto* ptr = create<sem::Pointer>(
+      create<sem::I32>(), ast::StorageClass::kPrivate, ast::Access::kReadWrite);
   EXPECT_FALSE(r()->IsStorable(ptr));
 }
 
@@ -95,7 +95,7 @@
   EXPECT_FALSE(r()->Resolve());
   EXPECT_EQ(
       r()->error(),
-      R"(error: ptr<private, i32> cannot be used as the type of a structure member)");
+      R"(error: ptr<private, i32, read_write> cannot be used as the type of a structure member)");
 }
 
 TEST_F(ResolverIsStorableTest, Struct_NestedStorable) {
@@ -126,7 +126,7 @@
   EXPECT_FALSE(r()->Resolve());
   EXPECT_EQ(
       r()->error(),
-      R"(error: ptr<private, i32> cannot be used as the type of a structure member)");
+      R"(error: ptr<private, i32, read_write> cannot be used as the type of a structure member)");
 }
 
 }  // namespace
diff --git a/src/resolver/ptr_ref_test.cc b/src/resolver/ptr_ref_test.cc
index e66a0ce..5680c12 100644
--- a/src/resolver/ptr_ref_test.cc
+++ b/src/resolver/ptr_ref_test.cc
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include "src/ast/struct_block_decoration.h"
 #include "src/resolver/resolver.h"
 #include "src/resolver/resolver_test_helper.h"
 #include "src/sem/reference_type.h"
@@ -57,6 +58,111 @@
   EXPECT_TRUE(TypeOf(expr)->As<sem::Reference>()->StoreType()->Is<sem::I32>());
 }
 
+TEST_F(ResolverPtrRefTest, DefaultStorageClass) {
+  // https://gpuweb.github.io/gpuweb/wgsl/#storage-class
+
+  auto* buf = Structure("S", {Member("m", ty.i32())},
+                        {create<ast::StructBlockDecoration>()});
+  auto* function = Var("f", ty.i32());
+  auto* private_ = Global("p", ty.i32(), ast::StorageClass::kPrivate);
+  auto* workgroup = Global("w", ty.i32(), ast::StorageClass::kWorkgroup);
+  auto* uniform = Global("ub", buf, ast::StorageClass::kUniform,
+                         ast::DecorationList{
+                             create<ast::BindingDecoration>(0),
+                             create<ast::GroupDecoration>(0),
+                         });
+  auto* storage = Global("sb", buf, ast::StorageClass::kStorage,
+                         ast::DecorationList{
+                             create<ast::BindingDecoration>(1),
+                             create<ast::GroupDecoration>(0),
+                         });
+  auto* handle = Global("h", ty.depth_texture(ast::TextureDimension::k2d),
+                        ast::DecorationList{
+                            create<ast::BindingDecoration>(2),
+                            create<ast::GroupDecoration>(0),
+                        });
+
+  WrapInFunction(function);
+
+  EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+  ASSERT_TRUE(TypeOf(function)->Is<sem::Reference>());
+  ASSERT_TRUE(TypeOf(private_)->Is<sem::Reference>());
+  ASSERT_TRUE(TypeOf(workgroup)->Is<sem::Reference>());
+  ASSERT_TRUE(TypeOf(uniform)->Is<sem::Reference>());
+  ASSERT_TRUE(TypeOf(storage)->Is<sem::Reference>());
+  ASSERT_TRUE(TypeOf(handle)->Is<sem::Reference>());
+
+  EXPECT_EQ(TypeOf(function)->As<sem::Reference>()->Access(),
+            ast::Access::kReadWrite);
+  EXPECT_EQ(TypeOf(private_)->As<sem::Reference>()->Access(),
+            ast::Access::kReadWrite);
+  EXPECT_EQ(TypeOf(workgroup)->As<sem::Reference>()->Access(),
+            ast::Access::kReadWrite);
+  EXPECT_EQ(TypeOf(uniform)->As<sem::Reference>()->Access(),
+            ast::Access::kRead);
+  EXPECT_EQ(TypeOf(storage)->As<sem::Reference>()->Access(),
+            ast::Access::kRead);
+  EXPECT_EQ(TypeOf(handle)->As<sem::Reference>()->Access(), ast::Access::kRead);
+}
+
+TEST_F(ResolverPtrRefTest, ExplicitStorageClass) {
+  // https://gpuweb.github.io/gpuweb/wgsl/#storage-class
+
+  auto* buf = Structure("S", {Member("m", ty.i32())},
+                        {create<ast::StructBlockDecoration>()});
+  auto* storage =
+      Global("sb", buf, ast::StorageClass::kStorage, ast::Access::kReadWrite,
+             ast::DecorationList{
+                 create<ast::BindingDecoration>(1),
+                 create<ast::GroupDecoration>(0),
+             });
+
+  EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+  ASSERT_TRUE(TypeOf(storage)->Is<sem::Reference>());
+
+  EXPECT_EQ(TypeOf(storage)->As<sem::Reference>()->Access(),
+            ast::Access::kReadWrite);
+}
+
+TEST_F(ResolverPtrRefTest, InheritsAccessFromOriginatingVariable) {
+  // struct Inner {
+  //    arr: array<i32, 4>;
+  // }
+  // [[block]] struct S {
+  //    inner: Inner;
+  // }
+  // [[group(0), binding(0)]] var<storage, read_write> s : S;
+  // fn f() {
+  //   let p = &s.inner.arr[2];
+  // }
+  auto* inner = Structure("Inner", {Member("arr", ty.array<i32, 4>())});
+  auto* buf = Structure("S", {Member("inner", inner)},
+                        {create<ast::StructBlockDecoration>()});
+  auto* storage =
+      Global("s", buf, ast::StorageClass::kStorage, ast::Access::kReadWrite,
+             ast::DecorationList{
+                 create<ast::BindingDecoration>(0),
+                 create<ast::GroupDecoration>(0),
+             });
+
+  auto* expr =
+      IndexAccessor(MemberAccessor(MemberAccessor(storage, "inner"), "arr"), 4);
+  auto* ptr = Const("p", nullptr, AddressOf(expr));
+
+  WrapInFunction(ptr);
+
+  EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+  ASSERT_TRUE(TypeOf(expr)->Is<sem::Reference>());
+  ASSERT_TRUE(TypeOf(ptr)->Is<sem::Pointer>());
+
+  EXPECT_EQ(TypeOf(expr)->As<sem::Reference>()->Access(),
+            ast::Access::kReadWrite);
+  EXPECT_EQ(TypeOf(ptr)->As<sem::Pointer>()->Access(), ast::Access::kReadWrite);
+}
+
 }  // namespace
 }  // namespace resolver
 }  // namespace tint
diff --git a/src/resolver/ptr_ref_validation_test.cc b/src/resolver/ptr_ref_validation_test.cc
index 0b2d07d..b391691 100644
--- a/src/resolver/ptr_ref_validation_test.cc
+++ b/src/resolver/ptr_ref_validation_test.cc
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include "src/ast/struct_block_decoration.h"
 #include "src/resolver/resolver.h"
 #include "src/resolver/resolver_test_helper.h"
 #include "src/sem/reference_type.h"
@@ -77,6 +78,42 @@
             "12:34 error: cannot dereference expression of type 'i32'");
 }
 
+TEST_F(ResolverPtrRefValidationTest, InferredAccessMismatch) {
+  // struct Inner {
+  //    arr: array<i32, 4>;
+  // }
+  // [[block]] struct S {
+  //    inner: Inner;
+  // }
+  // [[group(0), binding(0)]] var<storage> s : S;
+  // fn f() {
+  //   let p : pointer<storage, i32, read_write> = &s.inner.arr[2];
+  // }
+  auto* inner = Structure("Inner", {Member("arr", ty.array<i32, 4>())});
+  auto* buf = Structure("S", {Member("inner", inner)},
+                        {create<ast::StructBlockDecoration>()});
+  auto* storage = Global("s", buf, ast::StorageClass::kStorage,
+                         ast::DecorationList{
+                             create<ast::BindingDecoration>(0),
+                             create<ast::GroupDecoration>(0),
+                         });
+
+  auto* expr =
+      IndexAccessor(MemberAccessor(MemberAccessor(storage, "inner"), "arr"), 4);
+  auto* ptr = Const(
+      Source{{12, 34}}, "p",
+      ty.pointer<i32>(ast::StorageClass::kStorage, ast::Access::kReadWrite),
+      AddressOf(expr));
+
+  WrapInFunction(ptr);
+
+  EXPECT_FALSE(r()->Resolve());
+  EXPECT_EQ(r()->error(),
+            "12:34 error: cannot initialize let of type "
+            "'ptr<storage, i32, read_write>' with value of type "
+            "'ptr<storage, i32, read>'");
+}
+
 }  // namespace
 }  // namespace resolver
 }  // namespace tint
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index 14f4b7d..712e092 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -307,8 +307,12 @@
     }
     if (auto* t = ty->As<ast::Pointer>()) {
       if (auto* el = Type(t->type())) {
+        auto access = t->access();
+        if (access == ast::kUndefined) {
+          access = DefaultAccessForStorageClass(t->storage_class());
+        }
         return builder_->create<sem::Pointer>(const_cast<sem::Type*>(el),
-                                              t->storage_class());
+                                              t->storage_class(), access);
       }
       return nullptr;
     }
@@ -477,11 +481,17 @@
     }
   }
 
+  auto access = var->declared_access();
+  if (access == ast::Access::kUndefined) {
+    access = DefaultAccessForStorageClass(storage_class);
+  }
+
   auto* type = storage_type;
   if (!var->is_const()) {
     // Variable declaration. Unlike `let`, `var` has storage.
     // Variables are always of a reference type to the declared storage type.
-    type = builder_->create<sem::Reference>(storage_type, storage_class);
+    type =
+        builder_->create<sem::Reference>(storage_type, storage_class, access);
   }
 
   if (rhs_type && !ValidateVariableConstructor(var, storage_type, type_name,
@@ -489,15 +499,6 @@
     return nullptr;
   }
 
-  auto access = var->declared_access();
-  if (access == ast::Access::kUndefined &&
-      storage_class == ast::StorageClass::kStorage) {
-    // https://gpuweb.github.io/gpuweb/wgsl/#access-mode-defaults
-    // For the storage storage class, the access mode is optional, and defaults
-    // to read.
-    access = ast::Access::kRead;
-  }
-
   auto* info = variable_infos_.Create(var, const_cast<sem::Type*>(type),
                                       type_name, storage_class, access);
   variable_to_info_.emplace(var, info);
@@ -505,6 +506,21 @@
   return info;
 }
 
+ast::AccessControl Resolver::DefaultAccessForStorageClass(
+    ast::StorageClass storage_class) {
+  // https://gpuweb.github.io/gpuweb/wgsl/#storage-class
+  switch (storage_class) {
+    case ast::StorageClass::kStorage:
+      return ast::Access::kRead;
+    case ast::StorageClass::kUniform:
+    case ast::StorageClass::kUniformConstant:
+      return ast::Access::kRead;
+    default:
+      break;
+  }
+  return ast::Access::kReadWrite;
+}
+
 bool Resolver::ValidateVariableConstructor(const ast::Variable* var,
                                            const sem::Type* storage_type,
                                            const std::string& type_name,
@@ -1603,7 +1619,8 @@
 
   // If we're extracting from a reference, we return a reference.
   if (auto* ref = res->As<sem::Reference>()) {
-    ret = builder_->create<sem::Reference>(ret, ref->StorageClass());
+    ret = builder_->create<sem::Reference>(ret, ref->StorageClass(),
+                                           ref->Access());
   }
   SetType(expr, ret);
 
@@ -1959,7 +1976,8 @@
 
     // If we're extracting from a reference, we return a reference.
     if (auto* ref = structure->As<sem::Reference>()) {
-      ret = builder_->create<sem::Reference>(ret, ref->StorageClass());
+      ret = builder_->create<sem::Reference>(ret, ref->StorageClass(),
+                                             ref->Access());
     }
 
     builder_->Sem().Add(expr, builder_->create<sem::StructMemberAccess>(
@@ -2028,7 +2046,8 @@
       ret = vec->type();
       // If we're extracting from a reference, we return a reference.
       if (auto* ref = structure->As<sem::Reference>()) {
-        ret = builder_->create<sem::Reference>(ret, ref->StorageClass());
+        ret = builder_->create<sem::Reference>(ret, ref->StorageClass(),
+                                               ref->Access());
       }
     } else {
       // The vector will have a number of components equal to the length of
@@ -2291,8 +2310,8 @@
 
     case ast::UnaryOp::kAddressOf:
       if (auto* ref = expr_type->As<sem::Reference>()) {
-        type = builder_->create<sem::Pointer>(ref->StoreType(),
-                                              ref->StorageClass());
+        type = builder_->create<sem::Pointer>(
+            ref->StoreType(), ref->StorageClass(), ref->Access());
       } else {
         diagnostics_.add_error("cannot take the address of expression",
                                unary->expr()->source());
@@ -2302,8 +2321,8 @@
 
     case ast::UnaryOp::kIndirection:
       if (auto* ptr = expr_type->As<sem::Pointer>()) {
-        type = builder_->create<sem::Reference>(ptr->StoreType(),
-                                                ptr->StorageClass());
+        type = builder_->create<sem::Reference>(
+            ptr->StoreType(), ptr->StorageClass(), ptr->Access());
       } else {
         diagnostics_.add_error("cannot dereference expression of type '" +
                                    TypeNameOf(unary->expr()) + "'",
diff --git a/src/resolver/resolver.h b/src/resolver/resolver.h
index 4b893bf..da5ba4b 100644
--- a/src/resolver/resolver.h
+++ b/src/resolver/resolver.h
@@ -319,6 +319,11 @@
                            uint32_t& align,
                            uint32_t& size);
 
+  /// @param storage_class the storage class
+  /// @returns the default access control for the given storage class
+  ast::AccessControl DefaultAccessForStorageClass(
+      ast::StorageClass storage_class);
+
   /// @returns the resolved type of the ast::Expression `expr`
   /// @param expr the expression
   sem::Type* TypeOf(const ast::Expression* expr);
diff --git a/src/resolver/type_constructor_validation_test.cc b/src/resolver/type_constructor_validation_test.cc
index 94fc5ee..24a19b9 100644
--- a/src/resolver/type_constructor_validation_test.cc
+++ b/src/resolver/type_constructor_validation_test.cc
@@ -87,7 +87,8 @@
   ASSERT_TRUE(r()->Resolve()) << r()->error();
   auto* got = TypeOf(a_ident);
   auto* expected = create<sem::Reference>(params.create_rhs_sem_type(ty),
-                                          ast::StorageClass::kFunction);
+                                          ast::StorageClass::kFunction,
+                                          ast::Access::kReadWrite);
   ASSERT_EQ(got, expected) << "got:      " << FriendlyName(got) << "\n"
                            << "expected: " << FriendlyName(expected) << "\n";
 }
@@ -141,7 +142,8 @@
   ASSERT_TRUE(r()->Resolve()) << r()->error();
   auto* got = TypeOf(a_ident);
   auto* expected = create<sem::Reference>(params.create_rhs_sem_type(ty),
-                                          ast::StorageClass::kFunction);
+                                          ast::StorageClass::kFunction,
+                                          ast::Access::kReadWrite);
   ASSERT_EQ(got, expected) << "got:      " << FriendlyName(got) << "\n"
                            << "expected: " << FriendlyName(expected) << "\n";
 }
@@ -190,7 +192,8 @@
   ASSERT_TRUE(r()->Resolve()) << r()->error();
   auto* got = TypeOf(a_ident);
   auto* expected = create<sem::Reference>(params.create_rhs_sem_type(ty),
-                                          ast::StorageClass::kFunction);
+                                          ast::StorageClass::kFunction,
+                                          ast::Access::kReadWrite);
   ASSERT_EQ(got, expected) << "got:      " << FriendlyName(got) << "\n"
                            << "expected: " << FriendlyName(expected) << "\n";
 }
diff --git a/src/resolver/var_let_validation_test.cc b/src/resolver/var_let_validation_test.cc
index 23c42e9..a70bd9d 100644
--- a/src/resolver/var_let_validation_test.cc
+++ b/src/resolver/var_let_validation_test.cc
@@ -52,7 +52,8 @@
 
   EXPECT_FALSE(r()->Resolve());
   EXPECT_EQ(r()->error(),
-            "12:34 error: 'ptr<function, i32>' is not storable for assignment");
+            "12:34 error: 'ptr<function, i32, read_write>' is not storable for "
+            "assignment");
 }
 
 TEST_F(ResolverVarLetValidationTest, LetConstructorWrongType) {
diff --git a/src/sem/pointer_type.cc b/src/sem/pointer_type.cc
index 699ea9c..d4b9734 100644
--- a/src/sem/pointer_type.cc
+++ b/src/sem/pointer_type.cc
@@ -15,18 +15,24 @@
 #include "src/sem/pointer_type.h"
 
 #include "src/program_builder.h"
+#include "src/sem/reference_type.h"
 
 TINT_INSTANTIATE_TYPEINFO(tint::sem::Pointer);
 
 namespace tint {
 namespace sem {
 
-Pointer::Pointer(const Type* subtype, ast::StorageClass storage_class)
-    : subtype_(subtype), storage_class_(storage_class) {}
+Pointer::Pointer(const Type* subtype,
+                 ast::StorageClass storage_class,
+                 ast::Access access)
+    : subtype_(subtype), storage_class_(storage_class), access_(access) {
+  TINT_ASSERT(!subtype->Is<Reference>());
+  TINT_ASSERT(access != ast::Access::kUndefined);
+}
 
 std::string Pointer::type_name() const {
   std::ostringstream out;
-  out << "__ptr_" << storage_class_ << subtype_->type_name();
+  out << "__ptr_" << storage_class_ << subtype_->type_name() << "__" << access_;
   return out.str();
 }
 
@@ -36,7 +42,8 @@
   if (storage_class_ != ast::StorageClass::kNone) {
     out << storage_class_ << ", ";
   }
-  out << subtype_->FriendlyName(symbols) << ">";
+  out << subtype_->FriendlyName(symbols) << ", " << access_;
+  out << ">";
   return out.str();
 }
 
diff --git a/src/sem/pointer_type.h b/src/sem/pointer_type.h
index adcb127..ec0e98f 100644
--- a/src/sem/pointer_type.h
+++ b/src/sem/pointer_type.h
@@ -17,6 +17,7 @@
 
 #include <string>
 
+#include "src/ast/access.h"
 #include "src/ast/storage_class.h"
 #include "src/sem/type.h"
 
@@ -29,16 +30,24 @@
   /// Constructor
   /// @param subtype the pointee type
   /// @param storage_class the storage class of the pointer
-  Pointer(const Type* subtype, ast::StorageClass storage_class);
+  /// @param access the resolved access control of the reference
+  Pointer(const Type* subtype,
+          ast::StorageClass storage_class,
+          ast::Access access);
+
   /// Move constructor
   Pointer(Pointer&&);
   ~Pointer() override;
 
   /// @returns the pointee type
   const Type* StoreType() const { return subtype_; }
+
   /// @returns the storage class of the pointer
   ast::StorageClass StorageClass() const { return storage_class_; }
 
+  /// @returns the access control of the reference
+  ast::Access Access() const { return access_; }
+
   /// @returns the name for this type
   std::string type_name() const override;
 
@@ -50,6 +59,7 @@
  private:
   Type const* const subtype_;
   ast::StorageClass const storage_class_;
+  ast::AccessControl const access_;
 };
 
 }  // namespace sem
diff --git a/src/sem/pointer_type_test.cc b/src/sem/pointer_type_test.cc
index 56cbe3a..950d282 100644
--- a/src/sem/pointer_type_test.cc
+++ b/src/sem/pointer_type_test.cc
@@ -22,24 +22,29 @@
 using PointerTest = TestHelper;
 
 TEST_F(PointerTest, Creation) {
-  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kStorage);
+  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kStorage,
+                            ast::Access::kReadWrite);
   EXPECT_TRUE(r->StoreType()->Is<sem::I32>());
   EXPECT_EQ(r->StorageClass(), ast::StorageClass::kStorage);
+  EXPECT_EQ(r->Access(), ast::Access::kReadWrite);
 }
 
 TEST_F(PointerTest, TypeName) {
-  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kWorkgroup);
-  EXPECT_EQ(r->type_name(), "__ptr_workgroup__i32");
+  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kWorkgroup,
+                            ast::Access::kReadWrite);
+  EXPECT_EQ(r->type_name(), "__ptr_workgroup__i32__read_write");
+}
+
+TEST_F(PointerTest, FriendlyName) {
+  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kNone,
+                            ast::Access::kRead);
+  EXPECT_EQ(r->FriendlyName(Symbols()), "ptr<i32, read>");
 }
 
 TEST_F(PointerTest, FriendlyNameWithStorageClass) {
-  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kWorkgroup);
-  EXPECT_EQ(r->FriendlyName(Symbols()), "ptr<workgroup, i32>");
-}
-
-TEST_F(PointerTest, FriendlyNameWithoutStorageClass) {
-  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kNone);
-  EXPECT_EQ(r->FriendlyName(Symbols()), "ptr<i32>");
+  auto* r = create<Pointer>(create<I32>(), ast::StorageClass::kWorkgroup,
+                            ast::Access::kRead);
+  EXPECT_EQ(r->FriendlyName(Symbols()), "ptr<workgroup, i32, read>");
 }
 
 }  // namespace
diff --git a/src/sem/reference_type.cc b/src/sem/reference_type.cc
index 1c8ee01..959c61d 100644
--- a/src/sem/reference_type.cc
+++ b/src/sem/reference_type.cc
@@ -21,14 +21,17 @@
 namespace tint {
 namespace sem {
 
-Reference::Reference(const Type* subtype, ast::StorageClass storage_class)
-    : subtype_(subtype), storage_class_(storage_class) {
+Reference::Reference(const Type* subtype,
+                     ast::StorageClass storage_class,
+                     ast::Access access)
+    : subtype_(subtype), storage_class_(storage_class), access_(access) {
   TINT_ASSERT(!subtype->Is<Reference>());
+  TINT_ASSERT(access != ast::Access::kUndefined);
 }
 
 std::string Reference::type_name() const {
   std::ostringstream out;
-  out << "__ref_" << storage_class_ << subtype_->type_name();
+  out << "__ref_" << storage_class_ << subtype_->type_name() << "__" << access_;
   return out.str();
 }
 
@@ -38,7 +41,8 @@
   if (storage_class_ != ast::StorageClass::kNone) {
     out << storage_class_ << ", ";
   }
-  out << subtype_->FriendlyName(symbols) << ">";
+  out << subtype_->FriendlyName(symbols) << ", " << access_;
+  out << ">";
   return out.str();
 }
 
diff --git a/src/sem/reference_type.h b/src/sem/reference_type.h
index 0d9afed..5e2eaeb 100644
--- a/src/sem/reference_type.h
+++ b/src/sem/reference_type.h
@@ -17,6 +17,7 @@
 
 #include <string>
 
+#include "src/ast/access.h"
 #include "src/ast/storage_class.h"
 #include "src/sem/type.h"
 
@@ -29,16 +30,24 @@
   /// Constructor
   /// @param subtype the pointee type
   /// @param storage_class the storage class of the reference
-  Reference(const Type* subtype, ast::StorageClass storage_class);
+  /// @param access the resolved access control of the reference
+  Reference(const Type* subtype,
+            ast::StorageClass storage_class,
+            ast::Access access);
+
   /// Move constructor
   Reference(Reference&&);
   ~Reference() override;
 
   /// @returns the pointee type
   const Type* StoreType() const { return subtype_; }
+
   /// @returns the storage class of the reference
   ast::StorageClass StorageClass() const { return storage_class_; }
 
+  /// @returns the resolved access control of the reference.
+  ast::Access Access() const { return access_; }
+
   /// @returns the name for this type
   std::string type_name() const override;
 
@@ -50,6 +59,7 @@
  private:
   Type const* const subtype_;
   ast::StorageClass const storage_class_;
+  ast::AccessControl const access_;
 };
 
 }  // namespace sem
diff --git a/src/sem/reference_type_test.cc b/src/sem/reference_type_test.cc
index 3b279f4..a397e3a 100644
--- a/src/sem/reference_type_test.cc
+++ b/src/sem/reference_type_test.cc
@@ -22,24 +22,29 @@
 using ReferenceTest = TestHelper;
 
 TEST_F(ReferenceTest, Creation) {
-  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kStorage);
+  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kStorage,
+                              ast::Access::kReadWrite);
   EXPECT_TRUE(r->StoreType()->Is<sem::I32>());
   EXPECT_EQ(r->StorageClass(), ast::StorageClass::kStorage);
+  EXPECT_EQ(r->Access(), ast::Access::kReadWrite);
 }
 
 TEST_F(ReferenceTest, TypeName) {
-  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kWorkgroup);
-  EXPECT_EQ(r->type_name(), "__ref_workgroup__i32");
+  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kWorkgroup,
+                              ast::Access::kReadWrite);
+  EXPECT_EQ(r->type_name(), "__ref_workgroup__i32__read_write");
+}
+
+TEST_F(ReferenceTest, FriendlyName) {
+  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kNone,
+                              ast::Access::kRead);
+  EXPECT_EQ(r->FriendlyName(Symbols()), "ref<i32, read>");
 }
 
 TEST_F(ReferenceTest, FriendlyNameWithStorageClass) {
-  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kWorkgroup);
-  EXPECT_EQ(r->FriendlyName(Symbols()), "ref<workgroup, i32>");
-}
-
-TEST_F(ReferenceTest, FriendlyNameWithoutStorageClass) {
-  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kNone);
-  EXPECT_EQ(r->FriendlyName(Symbols()), "ref<i32>");
+  auto* r = create<Reference>(create<I32>(), ast::StorageClass::kWorkgroup,
+                              ast::Access::kRead);
+  EXPECT_EQ(r->FriendlyName(Symbols()), "ref<workgroup, i32, read>");
 }
 
 }  // namespace
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 94dd0d6..9846c30 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -154,7 +154,8 @@
 // TODO(dsinclair): How to annotate as workgroup?
 TEST_F(HlslGeneratorImplTest_Type, DISABLED_EmitType_Pointer) {
   auto* f32 = create<sem::F32>();
-  auto* p = create<sem::Pointer>(f32, ast::StorageClass::kWorkgroup);
+  auto* p = create<sem::Pointer>(f32, ast::StorageClass::kWorkgroup,
+                                 ast::Access::kReadWrite);
 
   GeneratorImpl& gen = Build();
 
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index d45ead6..ffd88b6 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -162,7 +162,8 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_Pointer) {
   auto* f32 = create<sem::F32>();
-  auto* p = create<sem::Pointer>(f32, ast::StorageClass::kWorkgroup);
+  auto* p = create<sem::Pointer>(f32, ast::StorageClass::kWorkgroup,
+                                 ast::Access::kReadWrite);
 
   GeneratorImpl& gen = Build();
 
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 6ebafb9..4362d9c 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -1730,8 +1730,8 @@
 uint32_t Builder::GenerateSplat(uint32_t scalar_id, const sem::Type* vec_type) {
   // Create a new vector to splat scalar into
   auto splat_vector = result_op();
-  auto* splat_vector_type =
-      builder_.create<sem::Pointer>(vec_type, ast::StorageClass::kFunction);
+  auto* splat_vector_type = builder_.create<sem::Pointer>(
+      vec_type, ast::StorageClass::kFunction, ast::Access::kReadWrite);
   push_function_var(
       {Operand::Int(GenerateTypeIfNeeded(splat_vector_type)), splat_vector,
        Operand::Int(ConvertStorageClass(ast::StorageClass::kFunction)),
@@ -3228,13 +3228,22 @@
     return 0;
   }
 
+  // Pointers and references with differing accesses should not result in a
+  // different SPIR-V types, so we explicitly ignore the access.
   // Pointers and References both map to a SPIR-V pointer type.
   // Transform a Reference to a Pointer to prevent these having duplicated
-  // definitions in the generated SPIR-V. Note that nested references are not
-  // legal, so only considering the top-level type is fine.
+  // definitions in the generated SPIR-V. Note that nested pointers and
+  // references are not legal in WGSL, so only considering the top-level type is
+  // fine.
   std::string type_name;
-  if (auto* ref = type->As<sem::Reference>()) {
-    type_name = sem::Pointer(ref->StoreType(), ref->StorageClass()).type_name();
+  if (auto* ptr = type->As<sem::Pointer>()) {
+    type_name =
+        sem::Pointer(ptr->StoreType(), ptr->StorageClass(), ast::kReadWrite)
+            .type_name();
+  } else if (auto* ref = type->As<sem::Reference>()) {
+    type_name =
+        sem::Pointer(ref->StoreType(), ref->StorageClass(), ast::kReadWrite)
+            .type_name();
   } else {
     type_name = type->type_name();
   }
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 2200436..a0fca8b 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -241,7 +241,8 @@
 
 TEST_F(BuilderTest_Type, GeneratePtr) {
   auto* i32 = create<sem::I32>();
-  auto* ptr = create<sem::Pointer>(i32, ast::StorageClass::kOutput);
+  auto* ptr = create<sem::Pointer>(i32, ast::StorageClass::kOutput,
+                                   ast::Access::kReadWrite);
 
   spirv::Builder& b = Build();
 
@@ -256,7 +257,8 @@
 
 TEST_F(BuilderTest_Type, ReturnsGeneratedPtr) {
   auto* i32 = create<sem::I32>();
-  auto* ptr = create<sem::Pointer>(i32, ast::StorageClass::kOutput);
+  auto* ptr = create<sem::Pointer>(i32, ast::StorageClass::kOutput,
+                                   ast::Access::kReadWrite);
 
   spirv::Builder& b = Build();
 
diff --git a/test/array/assign_to_function_var.wgsl.expected.spvasm b/test/array/assign_to_function_var.wgsl.expected.spvasm
index 806064b..668fc9c 100644
--- a/test/array/assign_to_function_var.wgsl.expected.spvasm
+++ b/test/array/assign_to_function_var.wgsl.expected.spvasm
@@ -25,6 +25,7 @@
                OpDecorate %_arr_int_uint_4 ArrayStride 16
                OpDecorate %S Block
                OpMemberDecorate %S 0 Offset 0
+               OpDecorate %src_uniform NonWritable
                OpDecorate %src_uniform DescriptorSet 0
                OpDecorate %src_uniform Binding 0
                OpDecorate %src_storage DescriptorSet 0
diff --git a/test/array/assign_to_private_var.wgsl.expected.spvasm b/test/array/assign_to_private_var.wgsl.expected.spvasm
index 3ef5aa7..258a540 100644
--- a/test/array/assign_to_private_var.wgsl.expected.spvasm
+++ b/test/array/assign_to_private_var.wgsl.expected.spvasm
@@ -25,6 +25,7 @@
                OpDecorate %_arr_int_uint_4 ArrayStride 16
                OpDecorate %S Block
                OpMemberDecorate %S 0 Offset 0
+               OpDecorate %src_uniform NonWritable
                OpDecorate %src_uniform DescriptorSet 0
                OpDecorate %src_uniform Binding 0
                OpDecorate %src_storage DescriptorSet 0
diff --git a/test/array/assign_to_storage_var.wgsl.expected.spvasm b/test/array/assign_to_storage_var.wgsl.expected.spvasm
index 67fa25e..1764efa 100644
--- a/test/array/assign_to_storage_var.wgsl.expected.spvasm
+++ b/test/array/assign_to_storage_var.wgsl.expected.spvasm
@@ -27,6 +27,7 @@
                OpDecorate %_arr_int_uint_4 ArrayStride 16
                OpDecorate %S Block
                OpMemberDecorate %S 0 Offset 0
+               OpDecorate %src_uniform NonWritable
                OpDecorate %src_uniform DescriptorSet 0
                OpDecorate %src_uniform Binding 0
                OpDecorate %src_storage DescriptorSet 0
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.spvasm b/test/array/assign_to_workgroup_var.wgsl.expected.spvasm
index e491f49..5f46701 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.spvasm
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.spvasm
@@ -25,6 +25,7 @@
                OpDecorate %_arr_int_uint_4 ArrayStride 16
                OpDecorate %S Block
                OpMemberDecorate %S 0 Offset 0
+               OpDecorate %src_uniform NonWritable
                OpDecorate %src_uniform DescriptorSet 0
                OpDecorate %src_uniform Binding 0
                OpDecorate %src_storage DescriptorSet 0
diff --git a/test/bug/tint/221.wgsl b/test/bug/tint/221.wgsl
index 5e2c9ff..270dc0f 100644
--- a/test/bug/tint/221.wgsl
+++ b/test/bug/tint/221.wgsl
@@ -13,7 +13,7 @@
   var i : u32 = 0u;
   loop {
     if (i >= b.count) { break; }
-    let p : ptr<storage, u32> = &b.data[i];
+    let p : ptr<storage, u32, read_write> = &b.data[i];
     if ((i % 2u) == 0u) { continue; }
     *p = 0u;              // Set odd elements of the array to 0
     continuing {
diff --git a/test/bug/tint/492.wgsl b/test/bug/tint/492.wgsl
index 997a367..9c8e426 100644
--- a/test/bug/tint/492.wgsl
+++ b/test/bug/tint/492.wgsl
@@ -2,6 +2,6 @@
 [[group(0), binding(0)]] var<storage, read_write> buf : S;
 
 [[stage(compute)]] fn main() {
-  let p : ptr<storage, i32> = &buf.a;
+  let p : ptr<storage, i32, read_write> = &buf.a;
   *p = 12;
 }
diff --git a/test/bug/tint/744.wgsl.expected.spvasm b/test/bug/tint/744.wgsl.expected.spvasm
index b7d0993..6a6fdc5 100644
--- a/test/bug/tint/744.wgsl.expected.spvasm
+++ b/test/bug/tint/744.wgsl.expected.spvasm
@@ -37,6 +37,7 @@
                OpMemberDecorate %Uniforms 0 Offset 0
                OpMemberDecorate %Uniforms 1 Offset 8
                OpMemberDecorate %Uniforms 2 Offset 16
+               OpDecorate %uniforms NonWritable
                OpDecorate %uniforms DescriptorSet 0
                OpDecorate %uniforms Binding 3
                OpDecorate %tint_symbol BuiltIn GlobalInvocationId
diff --git a/test/bug/tint/749.spvasm.expected.spvasm b/test/bug/tint/749.spvasm.expected.spvasm
index ae34237..73fb94d 100644
--- a/test/bug/tint/749.spvasm.expected.spvasm
+++ b/test/bug/tint/749.spvasm.expected.spvasm
@@ -49,6 +49,7 @@
                OpDecorate %gl_FragCoord BuiltIn FragCoord
                OpDecorate %buf0 Block
                OpMemberDecorate %buf0 0 Offset 0
+               OpDecorate %x_188 NonWritable
                OpDecorate %x_188 DescriptorSet 0
                OpDecorate %x_188 Binding 0
                OpDecorate %x_GLF_color Location 0
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl b/test/intrinsics/gen/frexp/013caa.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/4b73e3.wgsl
rename to test/intrinsics/gen/frexp/013caa.wgsl
index 32a16bd..b3be318 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl
+++ b/test/intrinsics/gen/frexp/013caa.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_4b73e3() {
+fn frexp_013caa() {
   var arg_1: vec4<i32>;
   var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_4b73e3();
+  frexp_013caa();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_4b73e3();
+  frexp_013caa();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_4b73e3();
+  frexp_013caa();
 }
diff --git a/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl
new file mode 100644
index 0000000..253f138
--- /dev/null
+++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_013caa() {
+  var arg_1 : vec4<i32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_013caa();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_013caa();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_013caa();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl b/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl
new file mode 100644
index 0000000..9fc0eb5
--- /dev/null
+++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_013caa() {
+  var arg_1 : vec4<i32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_013caa();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_013caa();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_013caa();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm
index f3901b4..9f2dda9 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_4b73e3 "frexp_4b73e3"
+               OpName %frexp_013caa "frexp_013caa"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -40,7 +40,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_4b73e3 = OpFunction %void None %9
+%frexp_013caa = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4int Function %17
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -57,17 +57,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %30 = OpFunctionCall %void %frexp_4b73e3
+         %30 = OpFunctionCall %void %frexp_013caa
          %31 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_4b73e3
+         %34 = OpFunctionCall %void %frexp_013caa
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_4b73e3
+         %37 = OpFunctionCall %void %frexp_013caa
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl
similarity index 78%
rename from test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl
index 8726a64..2a8819a 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_4b73e3() {
+fn frexp_013caa() {
   var arg_1 : vec4<i32>;
   var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_4b73e3();
+  frexp_013caa();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_4b73e3();
+  frexp_013caa();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_4b73e3();
+  frexp_013caa();
 }
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl b/test/intrinsics/gen/frexp/15edf3.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/1d6b62.wgsl
copy to test/intrinsics/gen/frexp/15edf3.wgsl
index c790bd0..c192ccb 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl
+++ b/test/intrinsics/gen/frexp/15edf3.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_1d6b62() {
+fn frexp_15edf3() {
   var arg_1: vec2<i32>;
   var res: vec2<f32> = frexp(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_1d6b62();
+  frexp_15edf3();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_1d6b62();
+  frexp_15edf3();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_1d6b62();
+  frexp_15edf3();
 }
diff --git a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl
new file mode 100644
index 0000000..7bcdeb1
--- /dev/null
+++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_15edf3() {
+  var arg_1 : vec2<i32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_15edf3();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_15edf3();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_15edf3();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl
new file mode 100644
index 0000000..d068701
--- /dev/null
+++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_15edf3() {
+  var arg_1 : vec2<i32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_15edf3();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_15edf3();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_15edf3();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm
index 3342c71..e624b76 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_1d6b62 "frexp_1d6b62"
+               OpName %frexp_15edf3 "frexp_15edf3"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_1d6b62 = OpFunction %void None %9
+%frexp_15edf3 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2int Function %17
         %res = OpVariable %_ptr_Function_v2float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_1d6b62
+         %32 = OpFunctionCall %void %frexp_15edf3
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_1d6b62
+         %36 = OpFunctionCall %void %frexp_15edf3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_1d6b62
+         %39 = OpFunctionCall %void %frexp_15edf3
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl
index bc2e1ab..1d029c4 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_1d6b62() {
+fn frexp_15edf3() {
   var arg_1 : vec2<i32>;
   var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_1d6b62();
+  frexp_15edf3();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_1d6b62();
+  frexp_15edf3();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_1d6b62();
+  frexp_15edf3();
 }
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl b/test/intrinsics/gen/frexp/19ab15.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/4b73e3.wgsl
copy to test/intrinsics/gen/frexp/19ab15.wgsl
index 32a16bd..7a8d53b 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl
+++ b/test/intrinsics/gen/frexp/19ab15.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_4b73e3() {
+fn frexp_19ab15() {
   var arg_1: vec4<i32>;
   var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_4b73e3();
+  frexp_19ab15();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_4b73e3();
+  frexp_19ab15();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_4b73e3();
+  frexp_19ab15();
 }
diff --git a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl
new file mode 100644
index 0000000..48b34c6
--- /dev/null
+++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_19ab15() {
+  var arg_1 : vec4<i32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_19ab15();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_19ab15();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_19ab15();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl
new file mode 100644
index 0000000..6d169a6
--- /dev/null
+++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_19ab15() {
+  var arg_1 : vec4<i32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_19ab15();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_19ab15();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_19ab15();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm
index f3901b4..e11b4a2 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_4b73e3 "frexp_4b73e3"
+               OpName %frexp_19ab15 "frexp_19ab15"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -40,7 +40,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_4b73e3 = OpFunction %void None %9
+%frexp_19ab15 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4int Function %17
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -57,17 +57,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %30 = OpFunctionCall %void %frexp_4b73e3
+         %30 = OpFunctionCall %void %frexp_19ab15
          %31 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_4b73e3
+         %34 = OpFunctionCall %void %frexp_19ab15
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_4b73e3
+         %37 = OpFunctionCall %void %frexp_19ab15
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl
index 8726a64..2cba608 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_4b73e3() {
+fn frexp_19ab15() {
   var arg_1 : vec4<i32>;
   var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_4b73e3();
+  frexp_19ab15();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_4b73e3();
+  frexp_19ab15();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_4b73e3();
+  frexp_19ab15();
 }
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.hlsl
deleted file mode 100644
index 4bfcbe0..0000000
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_1d6b62() {
-  var arg_1 : vec2<i32>;
-  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_1d6b62();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_1d6b62();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_1d6b62();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.msl b/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.msl
deleted file mode 100644
index 569c4e6..0000000
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_1d6b62() {
-  var arg_1 : vec2<i32>;
-  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_1d6b62();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_1d6b62();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_1d6b62();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl b/test/intrinsics/gen/frexp/2052e9.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/4b73e3.wgsl
copy to test/intrinsics/gen/frexp/2052e9.wgsl
index 32a16bd..498cb43 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl
+++ b/test/intrinsics/gen/frexp/2052e9.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_4b73e3() {
+fn frexp_2052e9() {
   var arg_1: vec4<i32>;
   var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_4b73e3();
+  frexp_2052e9();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_4b73e3();
+  frexp_2052e9();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_4b73e3();
+  frexp_2052e9();
 }
diff --git a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl
new file mode 100644
index 0000000..cb57d06
--- /dev/null
+++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_2052e9() {
+  var arg_1 : vec4<i32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_2052e9();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_2052e9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_2052e9();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl
new file mode 100644
index 0000000..0517bd3
--- /dev/null
+++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_2052e9() {
+  var arg_1 : vec4<i32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_2052e9();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_2052e9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_2052e9();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm
index f3901b4..9a2809d 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_4b73e3 "frexp_4b73e3"
+               OpName %frexp_2052e9 "frexp_2052e9"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -40,7 +40,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_4b73e3 = OpFunction %void None %9
+%frexp_2052e9 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4int Function %17
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -57,17 +57,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %30 = OpFunctionCall %void %frexp_4b73e3
+         %30 = OpFunctionCall %void %frexp_2052e9
          %31 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_4b73e3
+         %34 = OpFunctionCall %void %frexp_2052e9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_4b73e3
+         %37 = OpFunctionCall %void %frexp_2052e9
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl
index 8726a64..68ed2b0 100644
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_4b73e3() {
+fn frexp_2052e9() {
   var arg_1 : vec4<i32>;
   var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_4b73e3();
+  frexp_2052e9();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_4b73e3();
+  frexp_2052e9();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_4b73e3();
+  frexp_2052e9();
 }
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl b/test/intrinsics/gen/frexp/234f02.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/2507b2.wgsl
copy to test/intrinsics/gen/frexp/234f02.wgsl
index 2e1284c..635abfc 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl
+++ b/test/intrinsics/gen/frexp/234f02.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_2507b2() {
+fn frexp_234f02() {
   var arg_1: vec4<u32>;
   var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2507b2();
+  frexp_234f02();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2507b2();
+  frexp_234f02();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2507b2();
+  frexp_234f02();
 }
diff --git a/test/intrinsics/gen/frexp/234f02.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/234f02.wgsl.expected.hlsl
new file mode 100644
index 0000000..6611fed
--- /dev/null
+++ b/test/intrinsics/gen/frexp/234f02.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_234f02() {
+  var arg_1 : vec4<u32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_234f02();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_234f02();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_234f02();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/234f02.wgsl.expected.msl b/test/intrinsics/gen/frexp/234f02.wgsl.expected.msl
new file mode 100644
index 0000000..7866d13
--- /dev/null
+++ b/test/intrinsics/gen/frexp/234f02.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_234f02() {
+  var arg_1 : vec4<u32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_234f02();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_234f02();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_234f02();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/234f02.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/234f02.wgsl.expected.spvasm
index b937ce8..45424f1 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/234f02.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_2507b2 "frexp_2507b2"
+               OpName %frexp_234f02 "frexp_234f02"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -40,7 +40,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_2507b2 = OpFunction %void None %9
+%frexp_234f02 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4uint Function %17
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -57,17 +57,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %30 = OpFunctionCall %void %frexp_2507b2
+         %30 = OpFunctionCall %void %frexp_234f02
          %31 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_2507b2
+         %34 = OpFunctionCall %void %frexp_234f02
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_2507b2
+         %37 = OpFunctionCall %void %frexp_234f02
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/234f02.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/234f02.wgsl.expected.wgsl
index 1e09ae6..d695720 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/234f02.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_2507b2() {
+fn frexp_234f02() {
   var arg_1 : vec4<u32>;
   var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2507b2();
+  frexp_234f02();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2507b2();
+  frexp_234f02();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2507b2();
+  frexp_234f02();
 }
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/2507b2.wgsl.expected.hlsl
deleted file mode 100644
index 620eb05..0000000
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_2507b2() {
-  var arg_1 : vec4<u32>;
-  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_2507b2();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_2507b2();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_2507b2();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.msl b/test/intrinsics/gen/frexp/2507b2.wgsl.expected.msl
deleted file mode 100644
index 1a9febb..0000000
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_2507b2() {
-  var arg_1 : vec4<u32>;
-  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_2507b2();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_2507b2();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_2507b2();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl b/test/intrinsics/gen/frexp/2945dc.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/2a171c.wgsl
copy to test/intrinsics/gen/frexp/2945dc.wgsl
index 856dbda..9f626f8 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl
+++ b/test/intrinsics/gen/frexp/2945dc.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_2a171c() {
+fn frexp_2945dc() {
   var arg_1: vec2<u32>;
   var res: vec2<f32> = frexp(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2a171c();
+  frexp_2945dc();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2a171c();
+  frexp_2945dc();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2a171c();
+  frexp_2945dc();
 }
diff --git a/test/intrinsics/gen/frexp/2945dc.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.hlsl
new file mode 100644
index 0000000..0b0d3ac
--- /dev/null
+++ b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_2945dc() {
+  var arg_1 : vec2<u32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_2945dc();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_2945dc();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_2945dc();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/2945dc.wgsl.expected.msl b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.msl
new file mode 100644
index 0000000..068213b
--- /dev/null
+++ b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_2945dc() {
+  var arg_1 : vec2<u32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_2945dc();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_2945dc();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_2945dc();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/2945dc.wgsl.expected.spvasm
index 2369b9f..7b0f3b8 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_2a171c "frexp_2a171c"
+               OpName %frexp_2945dc "frexp_2945dc"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_2a171c = OpFunction %void None %9
+%frexp_2945dc = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2uint Function %17
         %res = OpVariable %_ptr_Function_v2float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_2a171c
+         %32 = OpFunctionCall %void %frexp_2945dc
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_2a171c
+         %36 = OpFunctionCall %void %frexp_2945dc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_2a171c
+         %39 = OpFunctionCall %void %frexp_2945dc
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.wgsl
similarity index 78%
rename from test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/2945dc.wgsl.expected.wgsl
index ffd3acd..eab81c0 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/2945dc.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_2a171c() {
+fn frexp_2945dc() {
   var arg_1 : vec2<u32>;
   var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2a171c();
+  frexp_2945dc();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2a171c();
+  frexp_2945dc();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2a171c();
+  frexp_2945dc();
 }
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/2a171c.wgsl.expected.hlsl
deleted file mode 100644
index 0e70670..0000000
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_2a171c() {
-  var arg_1 : vec2<u32>;
-  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_2a171c();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_2a171c();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_2a171c();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.msl b/test/intrinsics/gen/frexp/2a171c.wgsl.expected.msl
deleted file mode 100644
index ea365cf..0000000
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_2a171c() {
-  var arg_1 : vec2<u32>;
-  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_2a171c();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_2a171c();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_2a171c();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/34dd30.wgsl.expected.hlsl
deleted file mode 100644
index ee41ea0..0000000
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_34dd30() {
-  var arg_1 : u32;
-  var res : f32 = frexp(1.0, &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_34dd30();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_34dd30();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_34dd30();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.msl b/test/intrinsics/gen/frexp/34dd30.wgsl.expected.msl
deleted file mode 100644
index 05171f1..0000000
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_34dd30() {
-  var arg_1 : u32;
-  var res : f32 = frexp(1.0, &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_34dd30();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_34dd30();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_34dd30();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl b/test/intrinsics/gen/frexp/41e931.wgsl
similarity index 93%
copy from test/intrinsics/gen/frexp/99b922.wgsl
copy to test/intrinsics/gen/frexp/41e931.wgsl
index 44f1976..90c0994 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl
+++ b/test/intrinsics/gen/frexp/41e931.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_99b922() {
+fn frexp_41e931() {
   var arg_1: i32;
   var res: f32 = frexp(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_99b922();
+  frexp_41e931();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_99b922();
+  frexp_41e931();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_99b922();
+  frexp_41e931();
 }
diff --git a/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl
new file mode 100644
index 0000000..a2ddb10
--- /dev/null
+++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_41e931() {
+  var arg_1 : i32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_41e931();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_41e931();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_41e931();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl b/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl
new file mode 100644
index 0000000..f8f262b
--- /dev/null
+++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_41e931() {
+  var arg_1 : i32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_41e931();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_41e931();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_41e931();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm
index 5b3d37c..fb8b59b 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_99b922 "frexp_99b922"
+               OpName %frexp_41e931 "frexp_41e931"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -39,7 +39,7 @@
     %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
          %23 = OpTypeFunction %void %v4float
-%frexp_99b922 = OpFunction %void None %9
+%frexp_41e931 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function %16
         %res = OpVariable %_ptr_Function_float Function %4
@@ -56,17 +56,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %29 = OpFunctionCall %void %frexp_99b922
+         %29 = OpFunctionCall %void %frexp_41e931
          %30 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_99b922
+         %33 = OpFunctionCall %void %frexp_41e931
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_99b922
+         %36 = OpFunctionCall %void %frexp_41e931
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl
similarity index 76%
copy from test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl
index 6f56b9e..861e85a 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_99b922() {
+fn frexp_41e931() {
   var arg_1 : i32;
   var res : f32 = frexp(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_99b922();
+  frexp_41e931();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_99b922();
+  frexp_41e931();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_99b922();
+  frexp_41e931();
 }
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl b/test/intrinsics/gen/frexp/481e59.wgsl
similarity index 93%
copy from test/intrinsics/gen/frexp/99b922.wgsl
copy to test/intrinsics/gen/frexp/481e59.wgsl
index 44f1976..26eb6f8 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl
+++ b/test/intrinsics/gen/frexp/481e59.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_99b922() {
+fn frexp_481e59() {
   var arg_1: i32;
   var res: f32 = frexp(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_99b922();
+  frexp_481e59();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_99b922();
+  frexp_481e59();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_99b922();
+  frexp_481e59();
 }
diff --git a/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl
new file mode 100644
index 0000000..aed728b
--- /dev/null
+++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_481e59() {
+  var arg_1 : i32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_481e59();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_481e59();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_481e59();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl b/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl
new file mode 100644
index 0000000..818d1fa
--- /dev/null
+++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_481e59() {
+  var arg_1 : i32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_481e59();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_481e59();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_481e59();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm
index 5b3d37c..9b2cd5a 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_99b922 "frexp_99b922"
+               OpName %frexp_481e59 "frexp_481e59"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -39,7 +39,7 @@
     %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
          %23 = OpTypeFunction %void %v4float
-%frexp_99b922 = OpFunction %void None %9
+%frexp_481e59 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function %16
         %res = OpVariable %_ptr_Function_float Function %4
@@ -56,17 +56,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %29 = OpFunctionCall %void %frexp_99b922
+         %29 = OpFunctionCall %void %frexp_481e59
          %30 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_99b922
+         %33 = OpFunctionCall %void %frexp_481e59
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_99b922
+         %36 = OpFunctionCall %void %frexp_481e59
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl
similarity index 76%
rename from test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl
index 6f56b9e..85d63e6 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_99b922() {
+fn frexp_481e59() {
   var arg_1 : i32;
   var res : f32 = frexp(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_99b922();
+  frexp_481e59();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_99b922();
+  frexp_481e59();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_99b922();
+  frexp_481e59();
 }
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.hlsl
deleted file mode 100644
index 238343c..0000000
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_4b73e3() {
-  var arg_1 : vec4<i32>;
-  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_4b73e3();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_4b73e3();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_4b73e3();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.msl b/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.msl
deleted file mode 100644
index d993f99..0000000
--- a/test/intrinsics/gen/frexp/4b73e3.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_4b73e3() {
-  var arg_1 : vec4<i32>;
-  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_4b73e3();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_4b73e3();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_4b73e3();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl b/test/intrinsics/gen/frexp/5a141e.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/79ed81.wgsl
rename to test/intrinsics/gen/frexp/5a141e.wgsl
index 4debf1d..0dc80ef 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl
+++ b/test/intrinsics/gen/frexp/5a141e.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_79ed81() {
+fn frexp_5a141e() {
   var arg_1: vec3<i32>;
   var res: vec3<f32> = frexp(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_79ed81();
+  frexp_5a141e();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_79ed81();
+  frexp_5a141e();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_79ed81();
+  frexp_5a141e();
 }
diff --git a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl
new file mode 100644
index 0000000..b10253f
--- /dev/null
+++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_5a141e() {
+  var arg_1 : vec3<i32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_5a141e();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_5a141e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_5a141e();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl
new file mode 100644
index 0000000..43878ff
--- /dev/null
+++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_5a141e() {
+  var arg_1 : vec3<i32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_5a141e();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_5a141e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_5a141e();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm
similarity index 92%
rename from test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm
index be88edd..25145e1 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_79ed81 "frexp_79ed81"
+               OpName %frexp_5a141e "frexp_5a141e"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v3float = OpTypePointer Function %v3float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_79ed81 = OpFunction %void None %9
+%frexp_5a141e = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3int Function %17
         %res = OpVariable %_ptr_Function_v3float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_79ed81
+         %32 = OpFunctionCall %void %frexp_5a141e
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_79ed81
+         %36 = OpFunctionCall %void %frexp_5a141e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_79ed81
+         %39 = OpFunctionCall %void %frexp_5a141e
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl
index 8c5eff8..876a8b0 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_79ed81() {
+fn frexp_5a141e() {
   var arg_1 : vec3<i32>;
   var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_79ed81();
+  frexp_5a141e();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_79ed81();
+  frexp_5a141e();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_79ed81();
+  frexp_5a141e();
 }
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl b/test/intrinsics/gen/frexp/64e816.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/cb41c5.wgsl
copy to test/intrinsics/gen/frexp/64e816.wgsl
index 5bbb652..a3a82e1 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl
+++ b/test/intrinsics/gen/frexp/64e816.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_cb41c5() {
+fn frexp_64e816() {
   var arg_1: vec3<u32>;
   var res: vec3<f32> = frexp(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_cb41c5();
+  frexp_64e816();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_cb41c5();
+  frexp_64e816();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_cb41c5();
+  frexp_64e816();
 }
diff --git a/test/intrinsics/gen/frexp/64e816.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/64e816.wgsl.expected.hlsl
new file mode 100644
index 0000000..88bd5b2
--- /dev/null
+++ b/test/intrinsics/gen/frexp/64e816.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_64e816() {
+  var arg_1 : vec3<u32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_64e816();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_64e816();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_64e816();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/64e816.wgsl.expected.msl b/test/intrinsics/gen/frexp/64e816.wgsl.expected.msl
new file mode 100644
index 0000000..b6e90a7
--- /dev/null
+++ b/test/intrinsics/gen/frexp/64e816.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_64e816() {
+  var arg_1 : vec3<u32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_64e816();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_64e816();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_64e816();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/64e816.wgsl.expected.spvasm
similarity index 92%
rename from test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/64e816.wgsl.expected.spvasm
index f539a3c..f9109d0 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/64e816.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_cb41c5 "frexp_cb41c5"
+               OpName %frexp_64e816 "frexp_64e816"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v3float = OpTypePointer Function %v3float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_cb41c5 = OpFunction %void None %9
+%frexp_64e816 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3uint Function %17
         %res = OpVariable %_ptr_Function_v3float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_cb41c5
+         %32 = OpFunctionCall %void %frexp_64e816
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_cb41c5
+         %36 = OpFunctionCall %void %frexp_64e816
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_cb41c5
+         %39 = OpFunctionCall %void %frexp_64e816
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/64e816.wgsl.expected.wgsl
similarity index 78%
rename from test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/64e816.wgsl.expected.wgsl
index 24c63ba..aa4abe5 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/64e816.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_cb41c5() {
+fn frexp_64e816() {
   var arg_1 : vec3<u32>;
   var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_cb41c5();
+  frexp_64e816();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_cb41c5();
+  frexp_64e816();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_cb41c5();
+  frexp_64e816();
 }
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl b/test/intrinsics/gen/frexp/68fc89.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/2507b2.wgsl
copy to test/intrinsics/gen/frexp/68fc89.wgsl
index 2e1284c..2f94c36 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl
+++ b/test/intrinsics/gen/frexp/68fc89.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_2507b2() {
+fn frexp_68fc89() {
   var arg_1: vec4<u32>;
   var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2507b2();
+  frexp_68fc89();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2507b2();
+  frexp_68fc89();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2507b2();
+  frexp_68fc89();
 }
diff --git a/test/intrinsics/gen/frexp/68fc89.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.hlsl
new file mode 100644
index 0000000..47a27bb
--- /dev/null
+++ b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_68fc89() {
+  var arg_1 : vec4<u32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_68fc89();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_68fc89();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_68fc89();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/68fc89.wgsl.expected.msl b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.msl
new file mode 100644
index 0000000..5a205d4
--- /dev/null
+++ b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_68fc89() {
+  var arg_1 : vec4<u32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_68fc89();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_68fc89();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_68fc89();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/68fc89.wgsl.expected.spvasm
index b937ce8..867f9c7 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_2507b2 "frexp_2507b2"
+               OpName %frexp_68fc89 "frexp_68fc89"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -40,7 +40,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_2507b2 = OpFunction %void None %9
+%frexp_68fc89 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4uint Function %17
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -57,17 +57,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %30 = OpFunctionCall %void %frexp_2507b2
+         %30 = OpFunctionCall %void %frexp_68fc89
          %31 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_2507b2
+         %34 = OpFunctionCall %void %frexp_68fc89
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_2507b2
+         %37 = OpFunctionCall %void %frexp_68fc89
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/68fc89.wgsl.expected.wgsl
index 1e09ae6..c0b246c 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/68fc89.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_2507b2() {
+fn frexp_68fc89() {
   var arg_1 : vec4<u32>;
   var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2507b2();
+  frexp_68fc89();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2507b2();
+  frexp_68fc89();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2507b2();
+  frexp_68fc89();
 }
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl b/test/intrinsics/gen/frexp/6d0058.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/79ed81.wgsl
copy to test/intrinsics/gen/frexp/6d0058.wgsl
index 4debf1d..cfc4b35 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl
+++ b/test/intrinsics/gen/frexp/6d0058.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_79ed81() {
+fn frexp_6d0058() {
   var arg_1: vec3<i32>;
   var res: vec3<f32> = frexp(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_79ed81();
+  frexp_6d0058();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_79ed81();
+  frexp_6d0058();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_79ed81();
+  frexp_6d0058();
 }
diff --git a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl
new file mode 100644
index 0000000..43e0a07
--- /dev/null
+++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_6d0058() {
+  var arg_1 : vec3<i32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_6d0058();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_6d0058();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_6d0058();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl
new file mode 100644
index 0000000..efa0d91
--- /dev/null
+++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_6d0058() {
+  var arg_1 : vec3<i32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_6d0058();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_6d0058();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_6d0058();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm
index be88edd..51638f6 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_79ed81 "frexp_79ed81"
+               OpName %frexp_6d0058 "frexp_6d0058"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v3float = OpTypePointer Function %v3float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_79ed81 = OpFunction %void None %9
+%frexp_6d0058 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3int Function %17
         %res = OpVariable %_ptr_Function_v3float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_79ed81
+         %32 = OpFunctionCall %void %frexp_6d0058
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_79ed81
+         %36 = OpFunctionCall %void %frexp_6d0058
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_79ed81
+         %39 = OpFunctionCall %void %frexp_6d0058
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl
index 8c5eff8..a89b367 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_79ed81() {
+fn frexp_6d0058() {
   var arg_1 : vec3<i32>;
   var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_79ed81();
+  frexp_6d0058();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_79ed81();
+  frexp_6d0058();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_79ed81();
+  frexp_6d0058();
 }
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl b/test/intrinsics/gen/frexp/6f0e62.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/2507b2.wgsl
rename to test/intrinsics/gen/frexp/6f0e62.wgsl
index 2e1284c..05d62e8 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl
+++ b/test/intrinsics/gen/frexp/6f0e62.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_2507b2() {
+fn frexp_6f0e62() {
   var arg_1: vec4<u32>;
   var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2507b2();
+  frexp_6f0e62();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2507b2();
+  frexp_6f0e62();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2507b2();
+  frexp_6f0e62();
 }
diff --git a/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.hlsl
new file mode 100644
index 0000000..61f8228
--- /dev/null
+++ b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_6f0e62() {
+  var arg_1 : vec4<u32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_6f0e62();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_6f0e62();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_6f0e62();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.msl b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.msl
new file mode 100644
index 0000000..cb7fe62
--- /dev/null
+++ b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_6f0e62() {
+  var arg_1 : vec4<u32>;
+  var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_6f0e62();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_6f0e62();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_6f0e62();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/6f0e62.wgsl.expected.spvasm
index b937ce8..79b099d 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_2507b2 "frexp_2507b2"
+               OpName %frexp_6f0e62 "frexp_6f0e62"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -40,7 +40,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %23 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_2507b2 = OpFunction %void None %9
+%frexp_6f0e62 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4uint Function %17
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -57,17 +57,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %30 = OpFunctionCall %void %frexp_2507b2
+         %30 = OpFunctionCall %void %frexp_6f0e62
          %31 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_2507b2
+         %34 = OpFunctionCall %void %frexp_6f0e62
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_2507b2
+         %37 = OpFunctionCall %void %frexp_6f0e62
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.wgsl
similarity index 78%
rename from test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/6f0e62.wgsl.expected.wgsl
index 1e09ae6..b4dc40e 100644
--- a/test/intrinsics/gen/frexp/2507b2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/6f0e62.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_2507b2() {
+fn frexp_6f0e62() {
   var arg_1 : vec4<u32>;
   var res : vec4<f32> = frexp(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2507b2();
+  frexp_6f0e62();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2507b2();
+  frexp_6f0e62();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2507b2();
+  frexp_6f0e62();
 }
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl b/test/intrinsics/gen/frexp/790800.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/34dd30.wgsl
rename to test/intrinsics/gen/frexp/790800.wgsl
index 50bc56c..e925c31 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl
+++ b/test/intrinsics/gen/frexp/790800.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_34dd30() {
+fn frexp_790800() {
   var arg_1: u32;
   var res: f32 = frexp(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_34dd30();
+  frexp_790800();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_34dd30();
+  frexp_790800();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_34dd30();
+  frexp_790800();
 }
diff --git a/test/intrinsics/gen/frexp/790800.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/790800.wgsl.expected.hlsl
new file mode 100644
index 0000000..e6727b9
--- /dev/null
+++ b/test/intrinsics/gen/frexp/790800.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_790800() {
+  var arg_1 : u32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_790800();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_790800();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_790800();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/790800.wgsl.expected.msl b/test/intrinsics/gen/frexp/790800.wgsl.expected.msl
new file mode 100644
index 0000000..5272c01
--- /dev/null
+++ b/test/intrinsics/gen/frexp/790800.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_790800() {
+  var arg_1 : u32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_790800();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_790800();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_790800();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/790800.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/790800.wgsl.expected.spvasm
index 3dc8037..1b1ff20 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/790800.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_34dd30 "frexp_34dd30"
+               OpName %frexp_790800 "frexp_790800"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -39,7 +39,7 @@
     %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
          %23 = OpTypeFunction %void %v4float
-%frexp_34dd30 = OpFunction %void None %9
+%frexp_790800 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_uint Function %16
         %res = OpVariable %_ptr_Function_float Function %4
@@ -56,17 +56,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %29 = OpFunctionCall %void %frexp_34dd30
+         %29 = OpFunctionCall %void %frexp_790800
          %30 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_34dd30
+         %33 = OpFunctionCall %void %frexp_790800
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_34dd30
+         %36 = OpFunctionCall %void %frexp_790800
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/790800.wgsl.expected.wgsl
similarity index 76%
copy from test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/790800.wgsl.expected.wgsl
index 82331db..2d57582 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/790800.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_34dd30() {
+fn frexp_790800() {
   var arg_1 : u32;
   var res : f32 = frexp(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_34dd30();
+  frexp_790800();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_34dd30();
+  frexp_790800();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_34dd30();
+  frexp_790800();
 }
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/79ed81.wgsl.expected.hlsl
deleted file mode 100644
index 21b606e..0000000
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_79ed81() {
-  var arg_1 : vec3<i32>;
-  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_79ed81();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_79ed81();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_79ed81();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.msl b/test/intrinsics/gen/frexp/79ed81.wgsl.expected.msl
deleted file mode 100644
index 7b06582..0000000
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_79ed81() {
-  var arg_1 : vec3<i32>;
-  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_79ed81();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_79ed81();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_79ed81();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/99b922.wgsl.expected.hlsl
deleted file mode 100644
index 14fef02..0000000
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_99b922() {
-  var arg_1 : i32;
-  var res : f32 = frexp(1.0, &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_99b922();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_99b922();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_99b922();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.msl b/test/intrinsics/gen/frexp/99b922.wgsl.expected.msl
deleted file mode 100644
index 1a98e37..0000000
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_99b922() {
-  var arg_1 : i32;
-  var res : f32 = frexp(1.0, &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_99b922();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_99b922();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_99b922();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl b/test/intrinsics/gen/frexp/a951b5.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/1d6b62.wgsl
copy to test/intrinsics/gen/frexp/a951b5.wgsl
index c790bd0..a2309ab 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl
+++ b/test/intrinsics/gen/frexp/a951b5.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_1d6b62() {
+fn frexp_a951b5() {
   var arg_1: vec2<i32>;
   var res: vec2<f32> = frexp(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_1d6b62();
+  frexp_a951b5();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_1d6b62();
+  frexp_a951b5();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_1d6b62();
+  frexp_a951b5();
 }
diff --git a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl
new file mode 100644
index 0000000..14836ba
--- /dev/null
+++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_a951b5() {
+  var arg_1 : vec2<i32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_a951b5();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_a951b5();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_a951b5();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl
new file mode 100644
index 0000000..1fe0cd4
--- /dev/null
+++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_a951b5() {
+  var arg_1 : vec2<i32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_a951b5();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_a951b5();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_a951b5();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm
index 3342c71..8f5353e 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_1d6b62 "frexp_1d6b62"
+               OpName %frexp_a951b5 "frexp_a951b5"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_1d6b62 = OpFunction %void None %9
+%frexp_a951b5 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2int Function %17
         %res = OpVariable %_ptr_Function_v2float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_1d6b62
+         %32 = OpFunctionCall %void %frexp_a951b5
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_1d6b62
+         %36 = OpFunctionCall %void %frexp_a951b5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_1d6b62
+         %39 = OpFunctionCall %void %frexp_a951b5
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl
index bc2e1ab..31d7562 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_1d6b62() {
+fn frexp_a951b5() {
   var arg_1 : vec2<i32>;
   var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_1d6b62();
+  frexp_a951b5();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_1d6b62();
+  frexp_a951b5();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_1d6b62();
+  frexp_a951b5();
 }
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl b/test/intrinsics/gen/frexp/b2f24a.wgsl
similarity index 93%
copy from test/intrinsics/gen/frexp/34dd30.wgsl
copy to test/intrinsics/gen/frexp/b2f24a.wgsl
index 50bc56c..9643801 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl
+++ b/test/intrinsics/gen/frexp/b2f24a.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_34dd30() {
+fn frexp_b2f24a() {
   var arg_1: u32;
   var res: f32 = frexp(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_34dd30();
+  frexp_b2f24a();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_34dd30();
+  frexp_b2f24a();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_34dd30();
+  frexp_b2f24a();
 }
diff --git a/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.hlsl
new file mode 100644
index 0000000..4adbecb
--- /dev/null
+++ b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_b2f24a() {
+  var arg_1 : u32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_b2f24a();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_b2f24a();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_b2f24a();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.msl b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.msl
new file mode 100644
index 0000000..4480d45
--- /dev/null
+++ b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_b2f24a() {
+  var arg_1 : u32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_b2f24a();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_b2f24a();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_b2f24a();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/b2f24a.wgsl.expected.spvasm
index 3dc8037..f2632e0 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_34dd30 "frexp_34dd30"
+               OpName %frexp_b2f24a "frexp_b2f24a"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -39,7 +39,7 @@
     %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
          %23 = OpTypeFunction %void %v4float
-%frexp_34dd30 = OpFunction %void None %9
+%frexp_b2f24a = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_uint Function %16
         %res = OpVariable %_ptr_Function_float Function %4
@@ -56,17 +56,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %29 = OpFunctionCall %void %frexp_34dd30
+         %29 = OpFunctionCall %void %frexp_b2f24a
          %30 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_34dd30
+         %33 = OpFunctionCall %void %frexp_b2f24a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_34dd30
+         %36 = OpFunctionCall %void %frexp_b2f24a
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.wgsl
similarity index 76%
copy from test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/b2f24a.wgsl.expected.wgsl
index 82331db..8bb9f17 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/b2f24a.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_34dd30() {
+fn frexp_b2f24a() {
   var arg_1 : u32;
   var res : f32 = frexp(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_34dd30();
+  frexp_b2f24a();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_34dd30();
+  frexp_b2f24a();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_34dd30();
+  frexp_b2f24a();
 }
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl b/test/intrinsics/gen/frexp/b9e4de.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/79ed81.wgsl
copy to test/intrinsics/gen/frexp/b9e4de.wgsl
index 4debf1d..46c0257 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl
+++ b/test/intrinsics/gen/frexp/b9e4de.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_79ed81() {
+fn frexp_b9e4de() {
   var arg_1: vec3<i32>;
   var res: vec3<f32> = frexp(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_79ed81();
+  frexp_b9e4de();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_79ed81();
+  frexp_b9e4de();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_79ed81();
+  frexp_b9e4de();
 }
diff --git a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl
new file mode 100644
index 0000000..5889652
--- /dev/null
+++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_b9e4de() {
+  var arg_1 : vec3<i32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_b9e4de();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_b9e4de();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_b9e4de();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl
new file mode 100644
index 0000000..a63ed1b
--- /dev/null
+++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_b9e4de() {
+  var arg_1 : vec3<i32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_b9e4de();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_b9e4de();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_b9e4de();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm
index be88edd..1d6285c 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_79ed81 "frexp_79ed81"
+               OpName %frexp_b9e4de "frexp_b9e4de"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v3float = OpTypePointer Function %v3float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_79ed81 = OpFunction %void None %9
+%frexp_b9e4de = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3int Function %17
         %res = OpVariable %_ptr_Function_v3float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_79ed81
+         %32 = OpFunctionCall %void %frexp_b9e4de
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_79ed81
+         %36 = OpFunctionCall %void %frexp_b9e4de
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_79ed81
+         %39 = OpFunctionCall %void %frexp_b9e4de
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl
similarity index 78%
rename from test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl
index 8c5eff8..9209ec0 100644
--- a/test/intrinsics/gen/frexp/79ed81.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_79ed81() {
+fn frexp_b9e4de() {
   var arg_1 : vec3<i32>;
   var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_79ed81();
+  frexp_b9e4de();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_79ed81();
+  frexp_b9e4de();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_79ed81();
+  frexp_b9e4de();
 }
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl b/test/intrinsics/gen/frexp/c51019.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/cb41c5.wgsl
rename to test/intrinsics/gen/frexp/c51019.wgsl
index 5bbb652..808af1f 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl
+++ b/test/intrinsics/gen/frexp/c51019.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_cb41c5() {
+fn frexp_c51019() {
   var arg_1: vec3<u32>;
   var res: vec3<f32> = frexp(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_cb41c5();
+  frexp_c51019();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_cb41c5();
+  frexp_c51019();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_cb41c5();
+  frexp_c51019();
 }
diff --git a/test/intrinsics/gen/frexp/c51019.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/c51019.wgsl.expected.hlsl
new file mode 100644
index 0000000..5aa8fd8
--- /dev/null
+++ b/test/intrinsics/gen/frexp/c51019.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_c51019() {
+  var arg_1 : vec3<u32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_c51019();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_c51019();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_c51019();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/c51019.wgsl.expected.msl b/test/intrinsics/gen/frexp/c51019.wgsl.expected.msl
new file mode 100644
index 0000000..bfac14f
--- /dev/null
+++ b/test/intrinsics/gen/frexp/c51019.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_c51019() {
+  var arg_1 : vec3<u32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_c51019();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_c51019();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_c51019();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/c51019.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/c51019.wgsl.expected.spvasm
index f539a3c..5cf95ea 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/c51019.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_cb41c5 "frexp_cb41c5"
+               OpName %frexp_c51019 "frexp_c51019"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v3float = OpTypePointer Function %v3float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_cb41c5 = OpFunction %void None %9
+%frexp_c51019 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3uint Function %17
         %res = OpVariable %_ptr_Function_v3float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_cb41c5
+         %32 = OpFunctionCall %void %frexp_c51019
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_cb41c5
+         %36 = OpFunctionCall %void %frexp_c51019
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_cb41c5
+         %39 = OpFunctionCall %void %frexp_c51019
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/c51019.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/c51019.wgsl.expected.wgsl
index 24c63ba..4340a8d 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/c51019.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_cb41c5() {
+fn frexp_c51019() {
   var arg_1 : vec3<u32>;
   var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_cb41c5();
+  frexp_c51019();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_cb41c5();
+  frexp_c51019();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_cb41c5();
+  frexp_c51019();
 }
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.hlsl
deleted file mode 100644
index 820b451..0000000
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_cb41c5() {
-  var arg_1 : vec3<u32>;
-  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_cb41c5();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_cb41c5();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_cb41c5();
-}
-
-Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.msl b/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.msl
deleted file mode 100644
index ab6546f..0000000
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn frexp_cb41c5() {
-  var arg_1 : vec3<u32>;
-  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  frexp_cb41c5();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  frexp_cb41c5();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  frexp_cb41c5();
-}
-
-Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl b/test/intrinsics/gen/frexp/d06c2c.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/1d6b62.wgsl
rename to test/intrinsics/gen/frexp/d06c2c.wgsl
index c790bd0..11e757e 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl
+++ b/test/intrinsics/gen/frexp/d06c2c.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_1d6b62() {
+fn frexp_d06c2c() {
   var arg_1: vec2<i32>;
   var res: vec2<f32> = frexp(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_1d6b62();
+  frexp_d06c2c();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_1d6b62();
+  frexp_d06c2c();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_1d6b62();
+  frexp_d06c2c();
 }
diff --git a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl
new file mode 100644
index 0000000..2618017
--- /dev/null
+++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_d06c2c() {
+  var arg_1 : vec2<i32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_d06c2c();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_d06c2c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_d06c2c();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl
new file mode 100644
index 0000000..672bbfa
--- /dev/null
+++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_d06c2c() {
+  var arg_1 : vec2<i32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_d06c2c();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_d06c2c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_d06c2c();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm
similarity index 92%
rename from test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm
index 3342c71..45cf3cc 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_1d6b62 "frexp_1d6b62"
+               OpName %frexp_d06c2c "frexp_d06c2c"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_1d6b62 = OpFunction %void None %9
+%frexp_d06c2c = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2int Function %17
         %res = OpVariable %_ptr_Function_v2float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_1d6b62
+         %32 = OpFunctionCall %void %frexp_d06c2c
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_1d6b62
+         %36 = OpFunctionCall %void %frexp_d06c2c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_1d6b62
+         %39 = OpFunctionCall %void %frexp_d06c2c
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl
similarity index 78%
rename from test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl
index bc2e1ab..1045797 100644
--- a/test/intrinsics/gen/frexp/1d6b62.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_1d6b62() {
+fn frexp_d06c2c() {
   var arg_1 : vec2<i32>;
   var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_1d6b62();
+  frexp_d06c2c();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_1d6b62();
+  frexp_d06c2c();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_1d6b62();
+  frexp_d06c2c();
 }
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl b/test/intrinsics/gen/frexp/d68011.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/2a171c.wgsl
copy to test/intrinsics/gen/frexp/d68011.wgsl
index 856dbda..f9891c0 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl
+++ b/test/intrinsics/gen/frexp/d68011.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_2a171c() {
+fn frexp_d68011() {
   var arg_1: vec2<u32>;
   var res: vec2<f32> = frexp(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2a171c();
+  frexp_d68011();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2a171c();
+  frexp_d68011();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2a171c();
+  frexp_d68011();
 }
diff --git a/test/intrinsics/gen/frexp/d68011.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/d68011.wgsl.expected.hlsl
new file mode 100644
index 0000000..bdc55e2
--- /dev/null
+++ b/test/intrinsics/gen/frexp/d68011.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_d68011() {
+  var arg_1 : vec2<u32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_d68011();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_d68011();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_d68011();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/d68011.wgsl.expected.msl b/test/intrinsics/gen/frexp/d68011.wgsl.expected.msl
new file mode 100644
index 0000000..f36c6d6
--- /dev/null
+++ b/test/intrinsics/gen/frexp/d68011.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_d68011() {
+  var arg_1 : vec2<u32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_d68011();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_d68011();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_d68011();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/d68011.wgsl.expected.spvasm
similarity index 92%
rename from test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm
rename to test/intrinsics/gen/frexp/d68011.wgsl.expected.spvasm
index 2369b9f..9877fa2 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/d68011.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_2a171c "frexp_2a171c"
+               OpName %frexp_d68011 "frexp_d68011"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_2a171c = OpFunction %void None %9
+%frexp_d68011 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2uint Function %17
         %res = OpVariable %_ptr_Function_v2float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_2a171c
+         %32 = OpFunctionCall %void %frexp_d68011
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_2a171c
+         %36 = OpFunctionCall %void %frexp_d68011
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_2a171c
+         %39 = OpFunctionCall %void %frexp_d68011
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/d68011.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/d68011.wgsl.expected.wgsl
index ffd3acd..463d37e 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/d68011.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_2a171c() {
+fn frexp_d68011() {
   var arg_1 : vec2<u32>;
   var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2a171c();
+  frexp_d68011();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2a171c();
+  frexp_d68011();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2a171c();
+  frexp_d68011();
 }
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl b/test/intrinsics/gen/frexp/e061dd.wgsl
similarity index 93%
rename from test/intrinsics/gen/frexp/99b922.wgsl
rename to test/intrinsics/gen/frexp/e061dd.wgsl
index 44f1976..430fbf3 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl
+++ b/test/intrinsics/gen/frexp/e061dd.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_99b922() {
+fn frexp_e061dd() {
   var arg_1: i32;
   var res: f32 = frexp(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_99b922();
+  frexp_e061dd();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_99b922();
+  frexp_e061dd();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_99b922();
+  frexp_e061dd();
 }
diff --git a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl
new file mode 100644
index 0000000..26b58fe
--- /dev/null
+++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_e061dd() {
+  var arg_1 : i32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_e061dd();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_e061dd();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_e061dd();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl
new file mode 100644
index 0000000..3f46759
--- /dev/null
+++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_e061dd() {
+  var arg_1 : i32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_e061dd();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_e061dd();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_e061dd();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm
index 5b3d37c..b580d60 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_99b922 "frexp_99b922"
+               OpName %frexp_e061dd "frexp_e061dd"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -39,7 +39,7 @@
     %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
          %23 = OpTypeFunction %void %v4float
-%frexp_99b922 = OpFunction %void None %9
+%frexp_e061dd = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_int Function %16
         %res = OpVariable %_ptr_Function_float Function %4
@@ -56,17 +56,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %29 = OpFunctionCall %void %frexp_99b922
+         %29 = OpFunctionCall %void %frexp_e061dd
          %30 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_99b922
+         %33 = OpFunctionCall %void %frexp_e061dd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_99b922
+         %36 = OpFunctionCall %void %frexp_e061dd
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl
similarity index 76%
copy from test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl
index 6f56b9e..145442a 100644
--- a/test/intrinsics/gen/frexp/99b922.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_99b922() {
+fn frexp_e061dd() {
   var arg_1 : i32;
   var res : f32 = frexp(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_99b922();
+  frexp_e061dd();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_99b922();
+  frexp_e061dd();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_99b922();
+  frexp_e061dd();
 }
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl b/test/intrinsics/gen/frexp/e9b529.wgsl
similarity index 94%
copy from test/intrinsics/gen/frexp/cb41c5.wgsl
copy to test/intrinsics/gen/frexp/e9b529.wgsl
index 5bbb652..6a6b751 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl
+++ b/test/intrinsics/gen/frexp/e9b529.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_cb41c5() {
+fn frexp_e9b529() {
   var arg_1: vec3<u32>;
   var res: vec3<f32> = frexp(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_cb41c5();
+  frexp_e9b529();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_cb41c5();
+  frexp_e9b529();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_cb41c5();
+  frexp_e9b529();
 }
diff --git a/test/intrinsics/gen/frexp/e9b529.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.hlsl
new file mode 100644
index 0000000..ebf3704
--- /dev/null
+++ b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_e9b529() {
+  var arg_1 : vec3<u32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_e9b529();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_e9b529();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_e9b529();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/e9b529.wgsl.expected.msl b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.msl
new file mode 100644
index 0000000..30da175
--- /dev/null
+++ b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_e9b529() {
+  var arg_1 : vec3<u32>;
+  var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_e9b529();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_e9b529();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_e9b529();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/e9b529.wgsl.expected.spvasm
index f539a3c..1abcaaa 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_cb41c5 "frexp_cb41c5"
+               OpName %frexp_e9b529 "frexp_e9b529"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v3float = OpTypePointer Function %v3float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_cb41c5 = OpFunction %void None %9
+%frexp_e9b529 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3uint Function %17
         %res = OpVariable %_ptr_Function_v3float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_cb41c5
+         %32 = OpFunctionCall %void %frexp_e9b529
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_cb41c5
+         %36 = OpFunctionCall %void %frexp_e9b529
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_cb41c5
+         %39 = OpFunctionCall %void %frexp_e9b529
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/e9b529.wgsl.expected.wgsl
index 24c63ba..90976c6 100644
--- a/test/intrinsics/gen/frexp/cb41c5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/e9b529.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_cb41c5() {
+fn frexp_e9b529() {
   var arg_1 : vec3<u32>;
   var res : vec3<f32> = frexp(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_cb41c5();
+  frexp_e9b529();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_cb41c5();
+  frexp_e9b529();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_cb41c5();
+  frexp_e9b529();
 }
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl b/test/intrinsics/gen/frexp/ee3625.wgsl
similarity index 94%
rename from test/intrinsics/gen/frexp/2a171c.wgsl
rename to test/intrinsics/gen/frexp/ee3625.wgsl
index 856dbda..ceea238 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl
+++ b/test/intrinsics/gen/frexp/ee3625.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_2a171c() {
+fn frexp_ee3625() {
   var arg_1: vec2<u32>;
   var res: vec2<f32> = frexp(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2a171c();
+  frexp_ee3625();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2a171c();
+  frexp_ee3625();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2a171c();
+  frexp_ee3625();
 }
diff --git a/test/intrinsics/gen/frexp/ee3625.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.hlsl
new file mode 100644
index 0000000..03bfe9e
--- /dev/null
+++ b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_ee3625() {
+  var arg_1 : vec2<u32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_ee3625();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_ee3625();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_ee3625();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/ee3625.wgsl.expected.msl b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.msl
new file mode 100644
index 0000000..0f87e67
--- /dev/null
+++ b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_ee3625() {
+  var arg_1 : vec2<u32>;
+  var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_ee3625();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_ee3625();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_ee3625();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.spvasm
similarity index 92%
copy from test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/ee3625.wgsl.expected.spvasm
index 2369b9f..1c6bfdb 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_2a171c "frexp_2a171c"
+               OpName %frexp_ee3625 "frexp_ee3625"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -42,7 +42,7 @@
 %_ptr_Function_v2float = OpTypePointer Function %v2float
          %25 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%frexp_2a171c = OpFunction %void None %9
+%frexp_ee3625 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2uint Function %17
         %res = OpVariable %_ptr_Function_v2float Function %21
@@ -59,17 +59,17 @@
 %vertex_main = OpFunction %void None %9
          %30 = OpLabel
                OpStore %tint_pointsize %float_1
-         %32 = OpFunctionCall %void %frexp_2a171c
+         %32 = OpFunctionCall %void %frexp_ee3625
          %33 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_2a171c
+         %36 = OpFunctionCall %void %frexp_ee3625
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %38 = OpLabel
-         %39 = OpFunctionCall %void %frexp_2a171c
+         %39 = OpFunctionCall %void %frexp_ee3625
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.wgsl
similarity index 78%
copy from test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl
copy to test/intrinsics/gen/frexp/ee3625.wgsl.expected.wgsl
index ffd3acd..75feda1 100644
--- a/test/intrinsics/gen/frexp/2a171c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/ee3625.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_2a171c() {
+fn frexp_ee3625() {
   var arg_1 : vec2<u32>;
   var res : vec2<f32> = frexp(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_2a171c();
+  frexp_ee3625();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_2a171c();
+  frexp_ee3625();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_2a171c();
+  frexp_ee3625();
 }
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl b/test/intrinsics/gen/frexp/fb15f9.wgsl
similarity index 93%
copy from test/intrinsics/gen/frexp/34dd30.wgsl
copy to test/intrinsics/gen/frexp/fb15f9.wgsl
index 50bc56c..4c4c562 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl
+++ b/test/intrinsics/gen/frexp/fb15f9.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn frexp_34dd30() {
+fn frexp_fb15f9() {
   var arg_1: u32;
   var res: f32 = frexp(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_34dd30();
+  frexp_fb15f9();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_34dd30();
+  frexp_fb15f9();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_34dd30();
+  frexp_fb15f9();
 }
diff --git a/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.hlsl
new file mode 100644
index 0000000..8cd6a16
--- /dev/null
+++ b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_fb15f9() {
+  var arg_1 : u32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_fb15f9();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_fb15f9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_fb15f9();
+}
+
+Failed to generate: error: Unknown builtin method: frexp
diff --git a/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.msl b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.msl
new file mode 100644
index 0000000..fed5936
--- /dev/null
+++ b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn frexp_fb15f9() {
+  var arg_1 : u32;
+  var res : f32 = frexp(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  frexp_fb15f9();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  frexp_fb15f9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  frexp_fb15f9();
+}
+
+Failed to generate: error: Unknown import method: frexp
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm
copy to test/intrinsics/gen/frexp/fb15f9.wgsl.expected.spvasm
index 3dc8037..4c3b20c 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %frexp_34dd30 "frexp_34dd30"
+               OpName %frexp_fb15f9 "frexp_fb15f9"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -39,7 +39,7 @@
     %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
          %23 = OpTypeFunction %void %v4float
-%frexp_34dd30 = OpFunction %void None %9
+%frexp_fb15f9 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_uint Function %16
         %res = OpVariable %_ptr_Function_float Function %4
@@ -56,17 +56,17 @@
 %vertex_main = OpFunction %void None %9
          %28 = OpLabel
                OpStore %tint_pointsize %float_1
-         %29 = OpFunctionCall %void %frexp_34dd30
+         %29 = OpFunctionCall %void %frexp_fb15f9
          %30 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_34dd30
+         %33 = OpFunctionCall %void %frexp_fb15f9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_34dd30
+         %36 = OpFunctionCall %void %frexp_fb15f9
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.wgsl
similarity index 76%
rename from test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl
rename to test/intrinsics/gen/frexp/fb15f9.wgsl.expected.wgsl
index 82331db..9dccb9b 100644
--- a/test/intrinsics/gen/frexp/34dd30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/fb15f9.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_34dd30() {
+fn frexp_fb15f9() {
   var arg_1 : u32;
   var res : f32 = frexp(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  frexp_34dd30();
+  frexp_fb15f9();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  frexp_34dd30();
+  frexp_fb15f9();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  frexp_34dd30();
+  frexp_fb15f9();
 }
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl b/test/intrinsics/gen/modf/353f7d.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/8d6261.wgsl
copy to test/intrinsics/gen/modf/353f7d.wgsl
index ac17fa6..4977e0a 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl
+++ b/test/intrinsics/gen/modf/353f7d.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_8d6261() {
+fn modf_353f7d() {
   var arg_1: f32;
   var res: f32 = modf(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_8d6261();
+  modf_353f7d();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_8d6261();
+  modf_353f7d();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_8d6261();
+  modf_353f7d();
 }
diff --git a/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl b/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl
new file mode 100644
index 0000000..ece5f65
--- /dev/null
+++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_353f7d() {
+  var arg_1 : f32;
+  var res : f32 = modf(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_353f7d();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_353f7d();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_353f7d();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl b/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl
new file mode 100644
index 0000000..6cffdf6
--- /dev/null
+++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_353f7d() {
+  var arg_1 : f32;
+  var res : f32 = modf(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_353f7d();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_353f7d();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_353f7d();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm b/test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm
rename to test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm
index 4835826..8252221 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_8d6261 "modf_8d6261"
+               OpName %modf_353f7d "modf_353f7d"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -36,7 +36,7 @@
 %_ptr_Function_float = OpTypePointer Function %float
     %float_1 = OpConstant %float 1
          %20 = OpTypeFunction %void %v4float
-%modf_8d6261 = OpFunction %void None %9
+%modf_353f7d = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_float Function %4
         %res = OpVariable %_ptr_Function_float Function %4
@@ -53,17 +53,17 @@
 %vertex_main = OpFunction %void None %9
          %25 = OpLabel
                OpStore %tint_pointsize %float_1
-         %26 = OpFunctionCall %void %modf_8d6261
+         %26 = OpFunctionCall %void %modf_353f7d
          %27 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_8d6261
+         %30 = OpFunctionCall %void %modf_353f7d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_8d6261
+         %33 = OpFunctionCall %void %modf_353f7d
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl b/test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl
similarity index 77%
rename from test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl
rename to test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl
index e23dd0c..15ab31f 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_8d6261() {
+fn modf_353f7d() {
   var arg_1 : f32;
   var res : f32 = modf(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_8d6261();
+  modf_353f7d();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_8d6261();
+  modf_353f7d();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_8d6261();
+  modf_353f7d();
 }
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl b/test/intrinsics/gen/modf/3b79d5.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/f9f98c.wgsl
copy to test/intrinsics/gen/modf/3b79d5.wgsl
index 4b7d03b..6fee650 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl
+++ b/test/intrinsics/gen/modf/3b79d5.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_f9f98c() {
+fn modf_3b79d5() {
   var arg_1: vec3<f32>;
   var res: vec3<f32> = modf(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_f9f98c();
+  modf_3b79d5();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_f9f98c();
+  modf_3b79d5();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_f9f98c();
+  modf_3b79d5();
 }
diff --git a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl
new file mode 100644
index 0000000..ec08b22
--- /dev/null
+++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_3b79d5() {
+  var arg_1 : vec3<f32>;
+  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_3b79d5();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_3b79d5();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_3b79d5();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl
new file mode 100644
index 0000000..1f4ca0a
--- /dev/null
+++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_3b79d5() {
+  var arg_1 : vec3<f32>;
+  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_3b79d5();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_3b79d5();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_3b79d5();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm
index b62c50a..545e00f 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_f9f98c "modf_f9f98c"
+               OpName %modf_3b79d5 "modf_3b79d5"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -38,7 +38,7 @@
          %16 = OpConstantNull %v3float
          %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_f9f98c = OpFunction %void None %9
+%modf_3b79d5 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3float Function %16
         %res = OpVariable %_ptr_Function_v3float Function %16
@@ -55,17 +55,17 @@
 %vertex_main = OpFunction %void None %9
          %26 = OpLabel
                OpStore %tint_pointsize %float_1
-         %28 = OpFunctionCall %void %modf_f9f98c
+         %28 = OpFunctionCall %void %modf_3b79d5
          %29 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_f9f98c
+         %32 = OpFunctionCall %void %modf_3b79d5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_f9f98c
+         %35 = OpFunctionCall %void %modf_3b79d5
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl
similarity index 79%
copy from test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl
index 432b127..cfef611 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_f9f98c() {
+fn modf_3b79d5() {
   var arg_1 : vec3<f32>;
   var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_f9f98c();
+  modf_3b79d5();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_f9f98c();
+  modf_3b79d5();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_f9f98c();
+  modf_3b79d5();
 }
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl b/test/intrinsics/gen/modf/4bb324.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/c82e3f.wgsl
copy to test/intrinsics/gen/modf/4bb324.wgsl
index bc0651d..19bf06c 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl
+++ b/test/intrinsics/gen/modf/4bb324.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_c82e3f() {
+fn modf_4bb324() {
   var arg_1: vec4<f32>;
   var res: vec4<f32> = modf(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_c82e3f();
+  modf_4bb324();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_c82e3f();
+  modf_4bb324();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_c82e3f();
+  modf_4bb324();
 }
diff --git a/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl b/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl
new file mode 100644
index 0000000..86f45cb
--- /dev/null
+++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_4bb324() {
+  var arg_1 : vec4<f32>;
+  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_4bb324();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_4bb324();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_4bb324();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl b/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl
new file mode 100644
index 0000000..7a568c4
--- /dev/null
+++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_4bb324() {
+  var arg_1 : vec4<f32>;
+  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_4bb324();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_4bb324();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_4bb324();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm b/test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm
index 962fba0..6c2baae 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_c82e3f "modf_c82e3f"
+               OpName %modf_4bb324 "modf_4bb324"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -36,7 +36,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %19 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_c82e3f = OpFunction %void None %9
+%modf_4bb324 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4float Function %8
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -53,17 +53,17 @@
 %vertex_main = OpFunction %void None %9
          %24 = OpLabel
                OpStore %tint_pointsize %float_1
-         %26 = OpFunctionCall %void %modf_c82e3f
+         %26 = OpFunctionCall %void %modf_4bb324
          %27 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_c82e3f
+         %30 = OpFunctionCall %void %modf_4bb324
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_c82e3f
+         %33 = OpFunctionCall %void %modf_4bb324
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl b/test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl
similarity index 79%
copy from test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl
index 60bcecd..540e6bd 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_c82e3f() {
+fn modf_4bb324() {
   var arg_1 : vec4<f32>;
   var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_c82e3f();
+  modf_4bb324();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_c82e3f();
+  modf_4bb324();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_c82e3f();
+  modf_4bb324();
 }
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl b/test/intrinsics/gen/modf/4fe3d9.wgsl
similarity index 94%
rename from test/intrinsics/gen/modf/f9f98c.wgsl
rename to test/intrinsics/gen/modf/4fe3d9.wgsl
index 4b7d03b..733ffef 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl
+++ b/test/intrinsics/gen/modf/4fe3d9.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_f9f98c() {
+fn modf_4fe3d9() {
   var arg_1: vec3<f32>;
   var res: vec3<f32> = modf(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_f9f98c();
+  modf_4fe3d9();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_f9f98c();
+  modf_4fe3d9();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_f9f98c();
+  modf_4fe3d9();
 }
diff --git a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl
new file mode 100644
index 0000000..644a3b1
--- /dev/null
+++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_4fe3d9() {
+  var arg_1 : vec3<f32>;
+  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_4fe3d9();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_4fe3d9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_4fe3d9();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl
new file mode 100644
index 0000000..31bd393
--- /dev/null
+++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_4fe3d9() {
+  var arg_1 : vec3<f32>;
+  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_4fe3d9();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_4fe3d9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_4fe3d9();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm
rename to test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm
index b62c50a..9bd4558 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_f9f98c "modf_f9f98c"
+               OpName %modf_4fe3d9 "modf_4fe3d9"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -38,7 +38,7 @@
          %16 = OpConstantNull %v3float
          %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_f9f98c = OpFunction %void None %9
+%modf_4fe3d9 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3float Function %16
         %res = OpVariable %_ptr_Function_v3float Function %16
@@ -55,17 +55,17 @@
 %vertex_main = OpFunction %void None %9
          %26 = OpLabel
                OpStore %tint_pointsize %float_1
-         %28 = OpFunctionCall %void %modf_f9f98c
+         %28 = OpFunctionCall %void %modf_4fe3d9
          %29 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_f9f98c
+         %32 = OpFunctionCall %void %modf_4fe3d9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_f9f98c
+         %35 = OpFunctionCall %void %modf_4fe3d9
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl
similarity index 79%
rename from test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl
rename to test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl
index 432b127..65685b4 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_f9f98c() {
+fn modf_4fe3d9() {
   var arg_1 : vec3<f32>;
   var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_f9f98c();
+  modf_4fe3d9();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_f9f98c();
+  modf_4fe3d9();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_f9f98c();
+  modf_4fe3d9();
 }
diff --git a/test/intrinsics/gen/modf/d62477.wgsl b/test/intrinsics/gen/modf/51e4c6.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/d62477.wgsl
copy to test/intrinsics/gen/modf/51e4c6.wgsl
index 694148e..ce8a7af 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl
+++ b/test/intrinsics/gen/modf/51e4c6.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_d62477() {
+fn modf_51e4c6() {
   var arg_1: vec2<f32>;
   var res: vec2<f32> = modf(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_d62477();
+  modf_51e4c6();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_d62477();
+  modf_51e4c6();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_d62477();
+  modf_51e4c6();
 }
diff --git a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl
new file mode 100644
index 0000000..c4a06ce
--- /dev/null
+++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_51e4c6() {
+  var arg_1 : vec2<f32>;
+  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_51e4c6();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_51e4c6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_51e4c6();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl
new file mode 100644
index 0000000..cbe3395
--- /dev/null
+++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_51e4c6() {
+  var arg_1 : vec2<f32>;
+  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_51e4c6();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_51e4c6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_51e4c6();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm
index cef08e6..8952ffa 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_d62477 "modf_d62477"
+               OpName %modf_51e4c6 "modf_51e4c6"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -38,7 +38,7 @@
          %16 = OpConstantNull %v2float
          %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_d62477 = OpFunction %void None %9
+%modf_51e4c6 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2float Function %16
         %res = OpVariable %_ptr_Function_v2float Function %16
@@ -55,17 +55,17 @@
 %vertex_main = OpFunction %void None %9
          %26 = OpLabel
                OpStore %tint_pointsize %float_1
-         %28 = OpFunctionCall %void %modf_d62477
+         %28 = OpFunctionCall %void %modf_51e4c6
          %29 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_d62477
+         %32 = OpFunctionCall %void %modf_51e4c6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_d62477
+         %35 = OpFunctionCall %void %modf_51e4c6
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl
similarity index 79%
copy from test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl
index 5bd5b42..f0df577 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_d62477() {
+fn modf_51e4c6() {
   var arg_1 : vec2<f32>;
   var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_d62477();
+  modf_51e4c6();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_d62477();
+  modf_51e4c6();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_d62477();
+  modf_51e4c6();
 }
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl b/test/intrinsics/gen/modf/546e09.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/8d6261.wgsl
copy to test/intrinsics/gen/modf/546e09.wgsl
index ac17fa6..9d4286b 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl
+++ b/test/intrinsics/gen/modf/546e09.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_8d6261() {
+fn modf_546e09() {
   var arg_1: f32;
   var res: f32 = modf(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_8d6261();
+  modf_546e09();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_8d6261();
+  modf_546e09();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_8d6261();
+  modf_546e09();
 }
diff --git a/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl b/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl
new file mode 100644
index 0000000..04c6cd4
--- /dev/null
+++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_546e09() {
+  var arg_1 : f32;
+  var res : f32 = modf(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_546e09();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_546e09();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_546e09();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/546e09.wgsl.expected.msl b/test/intrinsics/gen/modf/546e09.wgsl.expected.msl
new file mode 100644
index 0000000..46f207c
--- /dev/null
+++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_546e09() {
+  var arg_1 : f32;
+  var res : f32 = modf(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_546e09();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_546e09();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_546e09();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm b/test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm
index 4835826..5a56fcf 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_8d6261 "modf_8d6261"
+               OpName %modf_546e09 "modf_546e09"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -36,7 +36,7 @@
 %_ptr_Function_float = OpTypePointer Function %float
     %float_1 = OpConstant %float 1
          %20 = OpTypeFunction %void %v4float
-%modf_8d6261 = OpFunction %void None %9
+%modf_546e09 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_float Function %4
         %res = OpVariable %_ptr_Function_float Function %4
@@ -53,17 +53,17 @@
 %vertex_main = OpFunction %void None %9
          %25 = OpLabel
                OpStore %tint_pointsize %float_1
-         %26 = OpFunctionCall %void %modf_8d6261
+         %26 = OpFunctionCall %void %modf_546e09
          %27 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_8d6261
+         %30 = OpFunctionCall %void %modf_546e09
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_8d6261
+         %33 = OpFunctionCall %void %modf_546e09
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl b/test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl
similarity index 77%
copy from test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl
index e23dd0c..214b34d 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_8d6261() {
+fn modf_546e09() {
   var arg_1 : f32;
   var res : f32 = modf(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_8d6261();
+  modf_546e09();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_8d6261();
+  modf_546e09();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_8d6261();
+  modf_546e09();
 }
diff --git a/test/intrinsics/gen/modf/d62477.wgsl b/test/intrinsics/gen/modf/86441c.wgsl
similarity index 94%
rename from test/intrinsics/gen/modf/d62477.wgsl
rename to test/intrinsics/gen/modf/86441c.wgsl
index 694148e..6dcbc7e 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl
+++ b/test/intrinsics/gen/modf/86441c.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_d62477() {
+fn modf_86441c() {
   var arg_1: vec2<f32>;
   var res: vec2<f32> = modf(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_d62477();
+  modf_86441c();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_d62477();
+  modf_86441c();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_d62477();
+  modf_86441c();
 }
diff --git a/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl b/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl
new file mode 100644
index 0000000..1d242fc
--- /dev/null
+++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_86441c() {
+  var arg_1 : vec2<f32>;
+  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_86441c();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_86441c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_86441c();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/86441c.wgsl.expected.msl b/test/intrinsics/gen/modf/86441c.wgsl.expected.msl
new file mode 100644
index 0000000..6698214
--- /dev/null
+++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_86441c() {
+  var arg_1 : vec2<f32>;
+  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_86441c();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_86441c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_86441c();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm b/test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm
rename to test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm
index cef08e6..7a41b14 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_d62477 "modf_d62477"
+               OpName %modf_86441c "modf_86441c"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -38,7 +38,7 @@
          %16 = OpConstantNull %v2float
          %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_d62477 = OpFunction %void None %9
+%modf_86441c = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2float Function %16
         %res = OpVariable %_ptr_Function_v2float Function %16
@@ -55,17 +55,17 @@
 %vertex_main = OpFunction %void None %9
          %26 = OpLabel
                OpStore %tint_pointsize %float_1
-         %28 = OpFunctionCall %void %modf_d62477
+         %28 = OpFunctionCall %void %modf_86441c
          %29 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_d62477
+         %32 = OpFunctionCall %void %modf_86441c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_d62477
+         %35 = OpFunctionCall %void %modf_86441c
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl b/test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl
similarity index 79%
copy from test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl
index 5bd5b42..1fae1f5 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_d62477() {
+fn modf_86441c() {
   var arg_1 : vec2<f32>;
   var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_d62477();
+  modf_86441c();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_d62477();
+  modf_86441c();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_d62477();
+  modf_86441c();
 }
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.hlsl b/test/intrinsics/gen/modf/8d6261.wgsl.expected.hlsl
deleted file mode 100644
index ccd4c1e..0000000
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_8d6261() {
-  var arg_1 : f32;
-  var res : f32 = modf(1.0, &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_8d6261();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_8d6261();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_8d6261();
-}
-
-Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.msl b/test/intrinsics/gen/modf/8d6261.wgsl.expected.msl
deleted file mode 100644
index 8db3689..0000000
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_8d6261() {
-  var arg_1 : f32;
-  var res : f32 = modf(1.0, &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_8d6261();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_8d6261();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_8d6261();
-}
-
-Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl b/test/intrinsics/gen/modf/955651.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/f9f98c.wgsl
copy to test/intrinsics/gen/modf/955651.wgsl
index 4b7d03b..67424ab 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl
+++ b/test/intrinsics/gen/modf/955651.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_f9f98c() {
+fn modf_955651() {
   var arg_1: vec3<f32>;
   var res: vec3<f32> = modf(vec3<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_f9f98c();
+  modf_955651();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_f9f98c();
+  modf_955651();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_f9f98c();
+  modf_955651();
 }
diff --git a/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl b/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl
new file mode 100644
index 0000000..94f15f6
--- /dev/null
+++ b/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_955651() {
+  var arg_1 : vec3<f32>;
+  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_955651();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_955651();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_955651();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/955651.wgsl.expected.msl b/test/intrinsics/gen/modf/955651.wgsl.expected.msl
new file mode 100644
index 0000000..b8a32ea
--- /dev/null
+++ b/test/intrinsics/gen/modf/955651.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_955651() {
+  var arg_1 : vec3<f32>;
+  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_955651();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_955651();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_955651();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm b/test/intrinsics/gen/modf/955651.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/955651.wgsl.expected.spvasm
index b62c50a..192d324 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/955651.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_f9f98c "modf_f9f98c"
+               OpName %modf_955651 "modf_955651"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -38,7 +38,7 @@
          %16 = OpConstantNull %v3float
          %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_f9f98c = OpFunction %void None %9
+%modf_955651 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v3float Function %16
         %res = OpVariable %_ptr_Function_v3float Function %16
@@ -55,17 +55,17 @@
 %vertex_main = OpFunction %void None %9
          %26 = OpLabel
                OpStore %tint_pointsize %float_1
-         %28 = OpFunctionCall %void %modf_f9f98c
+         %28 = OpFunctionCall %void %modf_955651
          %29 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_f9f98c
+         %32 = OpFunctionCall %void %modf_955651
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_f9f98c
+         %35 = OpFunctionCall %void %modf_955651
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl b/test/intrinsics/gen/modf/955651.wgsl.expected.wgsl
similarity index 79%
copy from test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/955651.wgsl.expected.wgsl
index 432b127..5c59bcf 100644
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/955651.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_f9f98c() {
+fn modf_955651() {
   var arg_1 : vec3<f32>;
   var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_f9f98c();
+  modf_955651();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_f9f98c();
+  modf_955651();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_f9f98c();
+  modf_955651();
 }
diff --git a/test/intrinsics/gen/modf/d62477.wgsl b/test/intrinsics/gen/modf/a54eca.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/d62477.wgsl
copy to test/intrinsics/gen/modf/a54eca.wgsl
index 694148e..938b256 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl
+++ b/test/intrinsics/gen/modf/a54eca.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_d62477() {
+fn modf_a54eca() {
   var arg_1: vec2<f32>;
   var res: vec2<f32> = modf(vec2<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_d62477();
+  modf_a54eca();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_d62477();
+  modf_a54eca();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_d62477();
+  modf_a54eca();
 }
diff --git a/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl b/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl
new file mode 100644
index 0000000..b5e104e
--- /dev/null
+++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_a54eca() {
+  var arg_1 : vec2<f32>;
+  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_a54eca();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_a54eca();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_a54eca();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl b/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl
new file mode 100644
index 0000000..c9d03f1
--- /dev/null
+++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_a54eca() {
+  var arg_1 : vec2<f32>;
+  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_a54eca();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_a54eca();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_a54eca();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm b/test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm
index cef08e6..c8d52c5 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_d62477 "modf_d62477"
+               OpName %modf_a54eca "modf_a54eca"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -38,7 +38,7 @@
          %16 = OpConstantNull %v2float
          %21 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_d62477 = OpFunction %void None %9
+%modf_a54eca = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v2float Function %16
         %res = OpVariable %_ptr_Function_v2float Function %16
@@ -55,17 +55,17 @@
 %vertex_main = OpFunction %void None %9
          %26 = OpLabel
                OpStore %tint_pointsize %float_1
-         %28 = OpFunctionCall %void %modf_d62477
+         %28 = OpFunctionCall %void %modf_a54eca
          %29 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_d62477
+         %32 = OpFunctionCall %void %modf_a54eca
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_d62477
+         %35 = OpFunctionCall %void %modf_a54eca
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl b/test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl
similarity index 79%
rename from test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl
rename to test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl
index 5bd5b42..0d5bce3 100644
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_d62477() {
+fn modf_a54eca() {
   var arg_1 : vec2<f32>;
   var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_d62477();
+  modf_a54eca();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_d62477();
+  modf_a54eca();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_d62477();
+  modf_a54eca();
 }
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.hlsl b/test/intrinsics/gen/modf/c82e3f.wgsl.expected.hlsl
deleted file mode 100644
index f1508a0..0000000
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_c82e3f() {
-  var arg_1 : vec4<f32>;
-  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_c82e3f();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_c82e3f();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_c82e3f();
-}
-
-Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.msl b/test/intrinsics/gen/modf/c82e3f.wgsl.expected.msl
deleted file mode 100644
index a6f21e05..0000000
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_c82e3f() {
-  var arg_1 : vec4<f32>;
-  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_c82e3f();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_c82e3f();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_c82e3f();
-}
-
-Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl b/test/intrinsics/gen/modf/d1d6f6.wgsl
similarity index 94%
rename from test/intrinsics/gen/modf/c82e3f.wgsl
rename to test/intrinsics/gen/modf/d1d6f6.wgsl
index bc0651d..487c066 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl
+++ b/test/intrinsics/gen/modf/d1d6f6.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_c82e3f() {
+fn modf_d1d6f6() {
   var arg_1: vec4<f32>;
   var res: vec4<f32> = modf(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_c82e3f();
+  modf_d1d6f6();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_c82e3f();
+  modf_d1d6f6();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_c82e3f();
+  modf_d1d6f6();
 }
diff --git a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl
new file mode 100644
index 0000000..fd38668
--- /dev/null
+++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_d1d6f6() {
+  var arg_1 : vec4<f32>;
+  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_d1d6f6();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_d1d6f6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_d1d6f6();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl
new file mode 100644
index 0000000..347d278
--- /dev/null
+++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_d1d6f6() {
+  var arg_1 : vec4<f32>;
+  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_d1d6f6();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_d1d6f6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_d1d6f6();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm
similarity index 91%
rename from test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm
rename to test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm
index 962fba0..1d40f64 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_c82e3f "modf_c82e3f"
+               OpName %modf_d1d6f6 "modf_d1d6f6"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -36,7 +36,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %19 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_c82e3f = OpFunction %void None %9
+%modf_d1d6f6 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4float Function %8
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -53,17 +53,17 @@
 %vertex_main = OpFunction %void None %9
          %24 = OpLabel
                OpStore %tint_pointsize %float_1
-         %26 = OpFunctionCall %void %modf_c82e3f
+         %26 = OpFunctionCall %void %modf_d1d6f6
          %27 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_c82e3f
+         %30 = OpFunctionCall %void %modf_d1d6f6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_c82e3f
+         %33 = OpFunctionCall %void %modf_d1d6f6
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl
similarity index 79%
copy from test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl
index 60bcecd..f4aea36 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_c82e3f() {
+fn modf_d1d6f6() {
   var arg_1 : vec4<f32>;
   var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_c82e3f();
+  modf_d1d6f6();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_c82e3f();
+  modf_d1d6f6();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_c82e3f();
+  modf_d1d6f6();
 }
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.hlsl b/test/intrinsics/gen/modf/d62477.wgsl.expected.hlsl
deleted file mode 100644
index a70bf73..0000000
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_d62477() {
-  var arg_1 : vec2<f32>;
-  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_d62477();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_d62477();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_d62477();
-}
-
-Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/d62477.wgsl.expected.msl b/test/intrinsics/gen/modf/d62477.wgsl.expected.msl
deleted file mode 100644
index 5d2cb3f..0000000
--- a/test/intrinsics/gen/modf/d62477.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_d62477() {
-  var arg_1 : vec2<f32>;
-  var res : vec2<f32> = modf(vec2<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_d62477();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_d62477();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_d62477();
-}
-
-Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl b/test/intrinsics/gen/modf/e83560.wgsl
similarity index 94%
copy from test/intrinsics/gen/modf/c82e3f.wgsl
copy to test/intrinsics/gen/modf/e83560.wgsl
index bc0651d..7fd0650 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl
+++ b/test/intrinsics/gen/modf/e83560.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_c82e3f() {
+fn modf_e83560() {
   var arg_1: vec4<f32>;
   var res: vec4<f32> = modf(vec4<f32>(), &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_c82e3f();
+  modf_e83560();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_c82e3f();
+  modf_e83560();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_c82e3f();
+  modf_e83560();
 }
diff --git a/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl b/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl
new file mode 100644
index 0000000..c8bf82c
--- /dev/null
+++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_e83560() {
+  var arg_1 : vec4<f32>;
+  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_e83560();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_e83560();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_e83560();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/e83560.wgsl.expected.msl b/test/intrinsics/gen/modf/e83560.wgsl.expected.msl
new file mode 100644
index 0000000..eebbc6a
--- /dev/null
+++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_e83560() {
+  var arg_1 : vec4<f32>;
+  var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_e83560();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_e83560();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_e83560();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm b/test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm
index 962fba0..8e5622c 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_c82e3f "modf_c82e3f"
+               OpName %modf_e83560 "modf_e83560"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -36,7 +36,7 @@
 %_ptr_Function_v4float = OpTypePointer Function %v4float
          %19 = OpTypeFunction %void %v4float
     %float_1 = OpConstant %float 1
-%modf_c82e3f = OpFunction %void None %9
+%modf_e83560 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_v4float Function %8
         %res = OpVariable %_ptr_Function_v4float Function %8
@@ -53,17 +53,17 @@
 %vertex_main = OpFunction %void None %9
          %24 = OpLabel
                OpStore %tint_pointsize %float_1
-         %26 = OpFunctionCall %void %modf_c82e3f
+         %26 = OpFunctionCall %void %modf_e83560
          %27 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_c82e3f
+         %30 = OpFunctionCall %void %modf_e83560
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_c82e3f
+         %33 = OpFunctionCall %void %modf_e83560
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl b/test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl
similarity index 79%
rename from test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl
rename to test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl
index 60bcecd..4d37105 100644
--- a/test/intrinsics/gen/modf/c82e3f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_c82e3f() {
+fn modf_e83560() {
   var arg_1 : vec4<f32>;
   var res : vec4<f32> = modf(vec4<f32>(), &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_c82e3f();
+  modf_e83560();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_c82e3f();
+  modf_e83560();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_c82e3f();
+  modf_e83560();
 }
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl b/test/intrinsics/gen/modf/f90945.wgsl
similarity index 94%
rename from test/intrinsics/gen/modf/8d6261.wgsl
rename to test/intrinsics/gen/modf/f90945.wgsl
index ac17fa6..b61908c 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl
+++ b/test/intrinsics/gen/modf/f90945.wgsl
@@ -22,23 +22,23 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-fn modf_8d6261() {
+fn modf_f90945() {
   var arg_1: f32;
   var res: f32 = modf(1.0, &arg_1);
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_8d6261();
+  modf_f90945();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_8d6261();
+  modf_f90945();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_8d6261();
+  modf_f90945();
 }
diff --git a/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl b/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl
new file mode 100644
index 0000000..1e46e3a
--- /dev/null
+++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_f90945() {
+  var arg_1 : f32;
+  var res : f32 = modf(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_f90945();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_f90945();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_f90945();
+}
+
+Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/f90945.wgsl.expected.msl b/test/intrinsics/gen/modf/f90945.wgsl.expected.msl
new file mode 100644
index 0000000..e8a2f8c
--- /dev/null
+++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.msl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+
+fn modf_f90945() {
+  var arg_1 : f32;
+  var res : f32 = modf(1.0, &(arg_1));
+}
+
+struct tint_symbol {
+  [[builtin(position)]]
+  value : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn vertex_main() -> tint_symbol {
+  modf_f90945();
+  let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
+  return tint_symbol_1;
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  modf_f90945();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  modf_f90945();
+}
+
+Failed to generate: error: Unknown import method: modf
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm b/test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm
similarity index 91%
copy from test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm
copy to test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm
index 4835826..0872a2f 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %tint_pointsize "tint_pointsize"
                OpName %tint_symbol_1 "tint_symbol_1"
-               OpName %modf_8d6261 "modf_8d6261"
+               OpName %modf_f90945 "modf_f90945"
                OpName %arg_1 "arg_1"
                OpName %res "res"
                OpName %tint_symbol_2 "tint_symbol_2"
@@ -36,7 +36,7 @@
 %_ptr_Function_float = OpTypePointer Function %float
     %float_1 = OpConstant %float 1
          %20 = OpTypeFunction %void %v4float
-%modf_8d6261 = OpFunction %void None %9
+%modf_f90945 = OpFunction %void None %9
          %12 = OpLabel
       %arg_1 = OpVariable %_ptr_Function_float Function %4
         %res = OpVariable %_ptr_Function_float Function %4
@@ -53,17 +53,17 @@
 %vertex_main = OpFunction %void None %9
          %25 = OpLabel
                OpStore %tint_pointsize %float_1
-         %26 = OpFunctionCall %void %modf_8d6261
+         %26 = OpFunctionCall %void %modf_f90945
          %27 = OpFunctionCall %void %tint_symbol_2 %8
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_8d6261
+         %30 = OpFunctionCall %void %modf_f90945
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_8d6261
+         %33 = OpFunctionCall %void %modf_f90945
                OpReturn
                OpFunctionEnd
diff --git a/test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl b/test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl
similarity index 77%
copy from test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl
copy to test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl
index e23dd0c..d8ced2a 100644
--- a/test/intrinsics/gen/modf/8d6261.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_8d6261() {
+fn modf_f90945() {
   var arg_1 : f32;
   var res : f32 = modf(1.0, &(arg_1));
 }
 
 [[stage(vertex)]]
 fn vertex_main() -> [[builtin(position)]] vec4<f32> {
-  modf_8d6261();
+  modf_f90945();
   return vec4<f32>();
 }
 
 [[stage(fragment)]]
 fn fragment_main() {
-  modf_8d6261();
+  modf_f90945();
 }
 
 [[stage(compute)]]
 fn compute_main() {
-  modf_8d6261();
+  modf_f90945();
 }
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.hlsl b/test/intrinsics/gen/modf/f9f98c.wgsl.expected.hlsl
deleted file mode 100644
index c55eb0c..0000000
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_f9f98c() {
-  var arg_1 : vec3<f32>;
-  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_f9f98c();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_f9f98c();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_f9f98c();
-}
-
-Failed to generate: error: Unknown builtin method: modf
diff --git a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.msl b/test/intrinsics/gen/modf/f9f98c.wgsl.expected.msl
deleted file mode 100644
index 6ad9f9e..0000000
--- a/test/intrinsics/gen/modf/f9f98c.wgsl.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-SKIP: FAILED
-
-
-fn modf_f9f98c() {
-  var arg_1 : vec3<f32>;
-  var res : vec3<f32> = modf(vec3<f32>(), &(arg_1));
-}
-
-[[stage(vertex)]]
-fn vertex_main() {
-  modf_f9f98c();
-}
-
-[[stage(fragment)]]
-fn fragment_main() {
-  modf_f9f98c();
-}
-
-[[stage(compute)]]
-fn compute_main() {
-  modf_f9f98c();
-}
-
-Failed to generate: error: Unknown import method: modf
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl b/test/ptr_ref/load/local/ptr_storage.wgsl
index d8f764f..56410e3 100644
--- a/test/ptr_ref/load/local/ptr_storage.wgsl
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl
@@ -8,6 +8,6 @@
 
 [[stage(compute)]]
 fn main() {
-  let p : ptr<storage, i32> = &v.a;
+  let p : ptr<storage, i32, read_write> = &v.a;
   let use : i32 = *p + 1;
 }
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.spvasm b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.spvasm
index 6810fb2..fdcdbaf 100644
--- a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.spvasm
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.spvasm
@@ -13,6 +13,7 @@
                OpName %main "main"
                OpDecorate %S Block
                OpMemberDecorate %S 0 Offset 0
+               OpDecorate %v NonWritable
                OpDecorate %v DescriptorSet 0
                OpDecorate %v Binding 0
         %int = OpTypeInt 32 1
diff --git a/test/samples/compute_boids.wgsl.expected.spvasm b/test/samples/compute_boids.wgsl.expected.spvasm
index a164a17..0ff734e 100644
--- a/test/samples/compute_boids.wgsl.expected.spvasm
+++ b/test/samples/compute_boids.wgsl.expected.spvasm
@@ -68,6 +68,7 @@
                OpMemberDecorate %SimParams 4 Offset 16
                OpMemberDecorate %SimParams 5 Offset 20
                OpMemberDecorate %SimParams 6 Offset 24
+               OpDecorate %params NonWritable
                OpDecorate %params Binding 0
                OpDecorate %params DescriptorSet 0
                OpDecorate %Particles Block
diff --git a/test/samples/cube.wgsl.expected.spvasm b/test/samples/cube.wgsl.expected.spvasm
index 8323589..0e22c2b 100644
--- a/test/samples/cube.wgsl.expected.spvasm
+++ b/test/samples/cube.wgsl.expected.spvasm
@@ -36,6 +36,7 @@
                OpMemberDecorate %Uniforms 0 Offset 0
                OpMemberDecorate %Uniforms 0 ColMajor
                OpMemberDecorate %Uniforms 0 MatrixStride 16
+               OpDecorate %uniforms NonWritable
                OpDecorate %uniforms Binding 0
                OpDecorate %uniforms DescriptorSet 0
                OpDecorate %tint_symbol Location 0