Import Tint changes from Dawn

Changes:
  - 824e824709a70401b4862cf6e1adf3a0a2a84c49 tint: Rename float / int literal tokens by Ben Clayton <bclayton@google.com>
  - 508e4a5a8227fe6354f7d5a70afac792695dae6c tint: Add abstract AInt and AFloat typedefs by Ben Clayton <bclayton@google.com>
  - 0a3cda99115e6d0da055dc8db2198819a4112e8d tint: Replace all ProgramBuilder float literals with '_f'... by Ben Clayton <bclayton@google.com>
  - 636e3d0111081026e718f7efaf3e46fcca5768a6 tint: Add a negation operator to Number by Ben Clayton <bclayton@google.com>
  - 17fa42d5274acc8693ed0d68fb2b26cf27adcf3d tint: Prevent Expr() implicit conversion to bool by Ben Clayton <bclayton@google.com>
  - 41285aa57874023f346a06f48cdf7c218c771d0e tint: Lex different tokens for float suffixes by Ben Clayton <bclayton@google.com>
  - 6c9e475211042d6d70caaae9f45fc0ed4901789a tint: Support dot4I8Packed and dot4U8Packed in sem by Jiawei Shao <jiawei.shao@intel.com>
GitOrigin-RevId: 824e824709a70401b4862cf6e1adf3a0a2a84c49
Change-Id: I12013f4c1cad059931d567c0a72bf7ab5969c89d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/89740
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/ast/builtin_texture_helper_test.cc b/src/tint/ast/builtin_texture_helper_test.cc
index 8f9091d..21cbd93 100644
--- a/src/tint/ast/builtin_texture_helper_test.cc
+++ b/src/tint/ast/builtin_texture_helper_test.cc
@@ -461,7 +461,7 @@
                 return b->ExprList(0_i,                      // component
                                    "texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f));  // coords
+                                   b->vec2<f32>(1_f, 2_f));  // coords
             },
         },
         {
@@ -480,7 +480,7 @@
                 return b->ExprList(0_i,                      // component
                                    "texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    b->vec2<i32>(3_i, 4_i));  // offset
             },
         },
@@ -500,7 +500,7 @@
                 return b->ExprList(0_i,                     // component
                                    "texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i);                    // array index
             },
         },
@@ -521,7 +521,7 @@
                 return b->ExprList(0_i,                      // component
                                    "texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
@@ -541,7 +541,7 @@
                 return b->ExprList(0_i,                           // component
                                    "texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f));  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f));  // coords
             },
         },
         {
@@ -560,7 +560,7 @@
                 return b->ExprList(0_i,                          // component
                                    "texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i);                         // array_index
             },
         },
@@ -577,7 +577,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f));  // coords
+                                   b->vec2<f32>(1_f, 2_f));  // coords
             },
         },
         {
@@ -594,7 +594,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    b->vec2<i32>(3_i, 4_i));  // offset
             },
         },
@@ -612,7 +612,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i);                    // array_index
             },
         },
@@ -631,7 +631,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
@@ -649,7 +649,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f));  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f));  // coords
             },
         },
         {
@@ -666,7 +666,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i);                         // array_index
             },
         },
@@ -684,8 +684,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
-                                   3.f);                    // depth_ref
+                                   b->vec2<f32>(1_f, 2_f),  // coords
+                                   3_f);                    // depth_ref
             },
         },
         {
@@ -703,8 +703,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
-                                   3.f,                      // depth_ref
+                                   b->vec2<f32>(1_f, 2_f),   // coords
+                                   3_f,                      // depth_ref
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
         },
@@ -723,9 +723,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i,                     // array_index
-                                   4.f);                    // depth_ref
+                                   4_f);                    // depth_ref
             },
         },
         {
@@ -744,9 +744,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
-                                   4.f,                      // depth_ref
+                                   4_f,                      // depth_ref
                                    b->vec2<i32>(5_i, 6_i));  // offset
             },
         },
@@ -764,8 +764,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
-                                   4.f);                         // depth_ref
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
+                                   4_f);                         // depth_ref
             },
         },
         {
@@ -783,9 +783,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i,                          // array_index
-                                   5.f);                         // depth_ref
+                                   5_f);                         // depth_ref
             },
         },
         {
@@ -951,7 +951,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",  // t
                                    "sampler",  // s
-                                   1.0f);      // coords
+                                   1_f);       // coords
             },
         },
         {
@@ -967,7 +967,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f));  // coords
+                                   b->vec2<f32>(1_f, 2_f));  // coords
             },
         },
         {
@@ -984,7 +984,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    b->vec2<i32>(3_i, 4_i));  // offset
             },
         },
@@ -1002,7 +1002,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i);                    // array_index
             },
         },
@@ -1021,7 +1021,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
@@ -1039,7 +1039,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f));  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f));  // coords
             },
         },
         {
@@ -1056,7 +1056,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),   // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),   // coords
                                    b->vec3<i32>(4_i, 5_i, 6_i));  // offset
             },
         },
@@ -1073,7 +1073,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f));  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f));  // coords
             },
         },
         {
@@ -1090,7 +1090,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i);                         // array_index
             },
         },
@@ -1107,7 +1107,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f));  // coords
+                                   b->vec2<f32>(1_f, 2_f));  // coords
             },
         },
         {
@@ -1124,7 +1124,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    b->vec2<i32>(3_i, 4_i));  // offset
             },
         },
@@ -1142,7 +1142,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i);                    // array_index
             },
         },
@@ -1161,7 +1161,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
@@ -1179,7 +1179,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f));  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f));  // coords
             },
         },
         {
@@ -1196,7 +1196,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i);                         // array_index
             },
         },
@@ -1214,8 +1214,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
-                                   3.f);                    // bias
+                                   b->vec2<f32>(1_f, 2_f),  // coords
+                                   3_f);                    // bias
             },
         },
         {
@@ -1233,8 +1233,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
-                                   3.f,                      // bias
+                                   b->vec2<f32>(1_f, 2_f),   // coords
+                                   3_f,                      // bias
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
         },
@@ -1253,9 +1253,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    4_i,                     // array_index
-                                   3.f);                    // bias
+                                   3_f);                    // bias
             },
         },
         {
@@ -1274,9 +1274,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
-                                   4.f,                      // bias
+                                   4_f,                      // bias
                                    b->vec2<i32>(5_i, 6_i));  // offset
             },
         },
@@ -1294,8 +1294,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
-                                   4.f);                         // bias
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
+                                   4_f);                         // bias
             },
         },
         {
@@ -1313,8 +1313,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),   // coords
-                                   4.f,                           // bias
+                                   b->vec3<f32>(1_f, 2_f, 3_f),   // coords
+                                   4_f,                           // bias
                                    b->vec3<i32>(5_i, 6_i, 7_i));  // offset
             },
         },
@@ -1332,8 +1332,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
-                                   4.f);                         // bias
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
+                                   4_f);                         // bias
             },
         },
         {
@@ -1351,9 +1351,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    3_i,                          // array_index
-                                   4.f);                         // bias
+                                   4_f);                         // bias
             },
         },
         {
@@ -1370,8 +1370,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
-                                   3.f);                    // level
+                                   b->vec2<f32>(1_f, 2_f),  // coords
+                                   3_f);                    // level
             },
         },
         {
@@ -1389,8 +1389,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
-                                   3.f,                      // level
+                                   b->vec2<f32>(1_f, 2_f),   // coords
+                                   3_f,                      // level
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
         },
@@ -1409,9 +1409,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i,                     // array_index
-                                   4.f);                    // level
+                                   4_f);                    // level
             },
         },
         {
@@ -1430,9 +1430,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
-                                   4.f,                      // level
+                                   4_f,                      // level
                                    b->vec2<i32>(5_i, 6_i));  // offset
             },
         },
@@ -1450,8 +1450,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
-                                   4.f);                         // level
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
+                                   4_f);                         // level
             },
         },
         {
@@ -1469,8 +1469,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),   // coords
-                                   4.f,                           // level
+                                   b->vec3<f32>(1_f, 2_f, 3_f),   // coords
+                                   4_f,                           // level
                                    b->vec3<i32>(5_i, 6_i, 7_i));  // offset
             },
         },
@@ -1488,8 +1488,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
-                                   4.f);                         // level
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
+                                   4_f);                         // level
             },
         },
         {
@@ -1507,9 +1507,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i,                          // array_index
-                                   5.f);                         // level
+                                   5_f);                         // level
             },
         },
         {
@@ -1526,7 +1526,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i);                    // level
             },
         },
@@ -1545,7 +1545,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // level
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
@@ -1565,7 +1565,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    3_i,                     // array_index
                                    4_i);                    // level
             },
@@ -1586,7 +1586,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
                                    4_i,                      // level
                                    b->vec2<i32>(5_i, 6_i));  // offset
@@ -1606,7 +1606,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i);                         // level
             },
         },
@@ -1625,7 +1625,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i,                          // array_index
                                    5_i);                         // level
             },
@@ -1643,11 +1643,11 @@
             TextureDataType::kF32,
             "textureSampleGrad",
             [](ProgramBuilder* b) {
-                return b->ExprList("texture",                  // t
-                                   "sampler",                  // s
-                                   b->vec2<f32>(1.0f, 2.0f),   // coords
-                                   b->vec2<f32>(3.0f, 4.0f),   // ddx
-                                   b->vec2<f32>(5.0f, 6.0f));  // ddy
+                return b->ExprList("texture",                // t
+                                   "sampler",                // s
+                                   b->vec2<f32>(1_f, 2_f),   // coords
+                                   b->vec2<f32>(3_f, 4_f),   // ddx
+                                   b->vec2<f32>(5_f, 6_f));  // ddy
             },
         },
         {
@@ -1666,9 +1666,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
-                                   b->vec2<f32>(3.f, 4.f),   // ddx
-                                   b->vec2<f32>(5.f, 6.f),   // ddy
+                                   b->vec2<f32>(1_f, 2_f),   // coords
+                                   b->vec2<f32>(3_f, 4_f),   // ddx
+                                   b->vec2<f32>(5_f, 6_f),   // ddy
                                    b->vec2<i32>(7_i, 7_i));  // offset
             },
         },
@@ -1688,10 +1688,10 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
-                                   b->vec2<f32>(4.f, 5.f),   // ddx
-                                   b->vec2<f32>(6.f, 7.f));  // ddy
+                                   b->vec2<f32>(4_f, 5_f),   // ddx
+                                   b->vec2<f32>(6_f, 7_f));  // ddy
             },
         },
         {
@@ -1711,10 +1711,10 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    3_i,                      // array_index
-                                   b->vec2<f32>(4.f, 5.f),   // ddx
-                                   b->vec2<f32>(6.f, 7.f),   // ddy
+                                   b->vec2<f32>(4_f, 5_f),   // ddx
+                                   b->vec2<f32>(6_f, 7_f),   // ddy
                                    b->vec2<i32>(6_i, 7_i));  // offset
             },
         },
@@ -1733,9 +1733,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),   // coords
-                                   b->vec3<f32>(4.f, 5.f, 6.f),   // ddx
-                                   b->vec3<f32>(7.f, 8.f, 9.f));  // ddy
+                                   b->vec3<f32>(1_f, 2_f, 3_f),   // coords
+                                   b->vec3<f32>(4_f, 5_f, 6_f),   // ddx
+                                   b->vec3<f32>(7_f, 8_f, 9_f));  // ddy
             },
         },
         {
@@ -1754,9 +1754,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),   // coords
-                                   b->vec3<f32>(4.f, 5.f, 6.f),   // ddx
-                                   b->vec3<f32>(7.f, 8.f, 9.f),   // ddy
+                                   b->vec3<f32>(1_f, 2_f, 3_f),   // coords
+                                   b->vec3<f32>(4_f, 5_f, 6_f),   // ddx
+                                   b->vec3<f32>(7_f, 8_f, 9_f),   // ddy
                                    b->vec3<i32>(0_i, 1_i, 2_i));  // offset
             },
         },
@@ -1775,9 +1775,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                     // t
                                    "sampler",                     // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),   // coords
-                                   b->vec3<f32>(4.f, 5.f, 6.f),   // ddx
-                                   b->vec3<f32>(7.f, 8.f, 9.f));  // ddy
+                                   b->vec3<f32>(1_f, 2_f, 3_f),   // coords
+                                   b->vec3<f32>(4_f, 5_f, 6_f),   // ddx
+                                   b->vec3<f32>(7_f, 8_f, 9_f));  // ddy
             },
         },
         {
@@ -1796,10 +1796,10 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                      // t
                                    "sampler",                      // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),    // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),    // coords
                                    4_i,                            // array_index
-                                   b->vec3<f32>(5.f, 6.f, 7.f),    // ddx
-                                   b->vec3<f32>(8.f, 9.f, 10.f));  // ddy
+                                   b->vec3<f32>(5_f, 6_f, 7_f),    // ddx
+                                   b->vec3<f32>(8_f, 9_f, 10_f));  // ddy
             },
         },
         {
@@ -1816,8 +1816,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
-                                   3.f);                    // depth_ref
+                                   b->vec2<f32>(1_f, 2_f),  // coords
+                                   3_f);                    // depth_ref
             },
         },
         {
@@ -1835,8 +1835,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
-                                   3.f,                      // depth_ref
+                                   b->vec2<f32>(1_f, 2_f),   // coords
+                                   3_f,                      // depth_ref
                                    b->vec2<i32>(4_i, 5_i));  // offset
             },
         },
@@ -1855,9 +1855,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",               // t
                                    "sampler",               // s
-                                   b->vec2<f32>(1.f, 2.f),  // coords
+                                   b->vec2<f32>(1_f, 2_f),  // coords
                                    4_i,                     // array_index
-                                   3.f);                    // depth_ref
+                                   3_f);                    // depth_ref
             },
         },
         {
@@ -1876,9 +1876,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                // t
                                    "sampler",                // s
-                                   b->vec2<f32>(1.f, 2.f),   // coords
+                                   b->vec2<f32>(1_f, 2_f),   // coords
                                    4_i,                      // array_index
-                                   3.f,                      // depth_ref
+                                   3_f,                      // depth_ref
                                    b->vec2<i32>(5_i, 6_i));  // offset
             },
         },
@@ -1896,8 +1896,8 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
-                                   4.f);                         // depth_ref
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
+                                   4_f);                         // depth_ref
             },
         },
         {
@@ -1915,9 +1915,9 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                    // t
                                    "sampler",                    // s
-                                   b->vec3<f32>(1.f, 2.f, 3.f),  // coords
+                                   b->vec3<f32>(1_f, 2_f, 3_f),  // coords
                                    4_i,                          // array_index
-                                   5.f);                         // depth_ref
+                                   5_f);                         // depth_ref
             },
         },
         {
@@ -2196,7 +2196,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                          // t
                                    1_i,                                // coords
-                                   b->vec4<f32>(2.f, 3.f, 4.f, 5.f));  // value
+                                   b->vec4<f32>(2_f, 3_f, 4_f, 5_f));  // value
             },
         },
         {
@@ -2212,7 +2212,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                          // t
                                    b->vec2<i32>(1_i, 2_i),             // coords
-                                   b->vec4<f32>(3.f, 4.f, 5.f, 6.f));  // value
+                                   b->vec4<f32>(3_f, 4_f, 5_f, 6_f));  // value
             },
         },
         {
@@ -2230,7 +2230,7 @@
                 return b->ExprList("texture",                          // t
                                    b->vec2<i32>(1_i, 2_i),             // coords
                                    3_i,                                // array_index
-                                   b->vec4<f32>(4.f, 5.f, 6.f, 7.f));  // value
+                                   b->vec4<f32>(4_f, 5_f, 6_f, 7_f));  // value
             },
         },
         {
@@ -2246,7 +2246,7 @@
             [](ProgramBuilder* b) {
                 return b->ExprList("texture",                          // t
                                    b->vec3<i32>(1_i, 2_i, 3_i),        // coords
-                                   b->vec4<f32>(4.f, 5.f, 6.f, 7.f));  // value
+                                   b->vec4<f32>(4_f, 5_f, 6_f, 7_f));  // value
             },
         },
     };
diff --git a/src/tint/ast/enable.cc b/src/tint/ast/enable.cc
index f4c6dd6..857e110 100644
--- a/src/tint/ast/enable.cc
+++ b/src/tint/ast/enable.cc
@@ -22,6 +22,10 @@
 namespace tint::ast {
 
 Enable::ExtensionKind Enable::NameToKind(const std::string& name) {
+    if (name == "chromium_experimental_dp4a") {
+        return Enable::ExtensionKind::kChromiumExperimentalDP4a;
+    }
+
     // The reserved internal extension name for testing
     if (name == "InternalExtensionForTesting") {
         return Enable::ExtensionKind::kInternalExtensionForTesting;
@@ -32,6 +36,8 @@
 
 std::string Enable::KindToName(ExtensionKind kind) {
     switch (kind) {
+        case ExtensionKind::kChromiumExperimentalDP4a:
+            return "chromium_experimental_dp4a";
         // The reserved internal extension for testing
         case ExtensionKind::kInternalExtensionForTesting:
             return "InternalExtensionForTesting";
diff --git a/src/tint/ast/enable.h b/src/tint/ast/enable.h
index 67c47c9..7bcd20e 100644
--- a/src/tint/ast/enable.h
+++ b/src/tint/ast/enable.h
@@ -32,6 +32,11 @@
   public:
     ///  The enum class identifing each supported WGSL extension
     enum class ExtensionKind {
+        /// An extension for the experimental feature
+        /// "chromium_experimental_dp4a".
+        /// See crbug.com/tint/1497 for more details
+        kChromiumExperimentalDP4a,
+
         /// An internal reserved extension for test, named
         /// "InternalExtensionForTesting"
         kInternalExtensionForTesting = -2,
diff --git a/src/tint/ast/float_literal_expression.cc b/src/tint/ast/float_literal_expression.cc
index 5be5a19..ab2d6cf 100644
--- a/src/tint/ast/float_literal_expression.cc
+++ b/src/tint/ast/float_literal_expression.cc
@@ -22,15 +22,18 @@
 
 namespace tint::ast {
 
-FloatLiteralExpression::FloatLiteralExpression(ProgramID pid, const Source& src, float val)
-    : Base(pid, src), value(val) {}
+FloatLiteralExpression::FloatLiteralExpression(ProgramID pid,
+                                               const Source& src,
+                                               double val,
+                                               Suffix suf)
+    : Base(pid, src), value(val), suffix(suf) {}
 
 FloatLiteralExpression::~FloatLiteralExpression() = default;
 
 const FloatLiteralExpression* FloatLiteralExpression::Clone(CloneContext* ctx) const {
     // Clone arguments outside of create() call to have deterministic ordering
     auto src = ctx->Clone(source);
-    return ctx->dst->create<FloatLiteralExpression>(src, value);
+    return ctx->dst->create<FloatLiteralExpression>(src, value, suffix);
 }
 
 }  // namespace tint::ast
diff --git a/src/tint/ast/float_literal_expression.h b/src/tint/ast/float_literal_expression.h
index d1e1a64..321efc891 100644
--- a/src/tint/ast/float_literal_expression.h
+++ b/src/tint/ast/float_literal_expression.h
@@ -24,11 +24,20 @@
 /// A float literal
 class FloatLiteralExpression final : public Castable<FloatLiteralExpression, LiteralExpression> {
   public:
+    /// Literal suffix
+    enum class Suffix {
+        /// No suffix
+        kNone,
+        /// 'f' suffix (f32)
+        kF,
+    };
+
     /// Constructor
     /// @param pid the identifier of the program that owns this node
     /// @param src the source of this node
-    /// @param value the float literals value
-    FloatLiteralExpression(ProgramID pid, const Source& src, float value);
+    /// @param val the literal value
+    /// @param suf the literal suffix
+    FloatLiteralExpression(ProgramID pid, const Source& src, double val, Suffix suf);
     ~FloatLiteralExpression() override;
 
     /// Clones this node and all transitive child nodes using the `CloneContext`
@@ -37,8 +46,11 @@
     /// @return the newly cloned node
     const FloatLiteralExpression* Clone(CloneContext* ctx) const override;
 
-    /// The float literal value
-    const float value;
+    /// The literal value
+    const double value;
+
+    /// The literal suffix
+    const Suffix suffix;
 };
 
 }  // namespace tint::ast
diff --git a/src/tint/ast/float_literal_expression_test.cc b/src/tint/ast/float_literal_expression_test.cc
index c0f1e16..a2f9b25 100644
--- a/src/tint/ast/float_literal_expression_test.cc
+++ b/src/tint/ast/float_literal_expression_test.cc
@@ -19,10 +19,18 @@
 
 using FloatLiteralExpressionTest = TestHelper;
 
-TEST_F(FloatLiteralExpressionTest, Value) {
-    auto* f = create<FloatLiteralExpression>(47.2f);
-    ASSERT_TRUE(f->Is<FloatLiteralExpression>());
-    EXPECT_EQ(f->value, 47.2f);
+TEST_F(FloatLiteralExpressionTest, SuffixNone) {
+    auto* i = create<FloatLiteralExpression>(42.0, FloatLiteralExpression::Suffix::kNone);
+    ASSERT_TRUE(i->Is<FloatLiteralExpression>());
+    EXPECT_EQ(i->value, 42);
+    EXPECT_EQ(i->suffix, FloatLiteralExpression::Suffix::kNone);
+}
+
+TEST_F(FloatLiteralExpressionTest, SuffixF) {
+    auto* i = create<FloatLiteralExpression>(42.0, FloatLiteralExpression::Suffix::kF);
+    ASSERT_TRUE(i->Is<FloatLiteralExpression>());
+    EXPECT_EQ(i->value, 42);
+    EXPECT_EQ(i->suffix, FloatLiteralExpression::Suffix::kF);
 }
 
 }  // namespace
diff --git a/src/tint/ast/variable_test.cc b/src/tint/ast/variable_test.cc
index b43a19e..e62ec1e 100644
--- a/src/tint/ast/variable_test.cc
+++ b/src/tint/ast/variable_test.cc
@@ -17,6 +17,8 @@
 #include "src/tint/ast/id_attribute.h"
 #include "src/tint/ast/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::ast {
 namespace {
 
@@ -84,7 +86,7 @@
         {
             ProgramBuilder b1;
             ProgramBuilder b2;
-            b1.Var("x", b1.ty.f32(), StorageClass::kNone, b2.Expr(1.2f));
+            b1.Var("x", b1.ty.f32(), StorageClass::kNone, b2.Expr(1.2_f));
         },
         "internal compiler error");
 }
diff --git a/src/tint/inspector/inspector.cc b/src/tint/inspector/inspector.cc
index bdc14b0..36fcfb7 100644
--- a/src/tint/inspector/inspector.cc
+++ b/src/tint/inspector/inspector.cc
@@ -259,7 +259,7 @@
         }
 
         if (auto* l = literal->As<ast::FloatLiteralExpression>()) {
-            result[constant_id] = Scalar(l->value);
+            result[constant_id] = Scalar(static_cast<float>(l->value));
             continue;
         }
 
diff --git a/src/tint/inspector/inspector_test.cc b/src/tint/inspector/inspector_test.cc
index 8e3662b..18a33b1 100644
--- a/src/tint/inspector/inspector_test.cc
+++ b/src/tint/inspector/inspector_test.cc
@@ -623,7 +623,7 @@
 }
 
 TEST_F(InspectorGetEntryPointTest, OverridableConstantInitialized) {
-    AddOverridableConstantWithoutID("foo", ty.f32(), Expr(0.0f));
+    AddOverridableConstantWithoutID("foo", ty.f32(), Expr(0_f));
     MakePlainGlobalReferenceBodyFunction("ep_func", "foo", ty.f32(),
                                          {Stage(ast::PipelineStage::kCompute), WorkgroupSize(1_i)});
 
@@ -991,7 +991,7 @@
 
 TEST_F(InspectorGetConstantIDsTest, I32) {
     AddOverridableConstantWithID("foo", 1, ty.i32(), nullptr);
-    AddOverridableConstantWithID("bar", 20, ty.i32(), Expr(i32(-42)));
+    AddOverridableConstantWithID("bar", 20, ty.i32(), Expr(-42_i));
     AddOverridableConstantWithID("baz", 300, ty.i32(), Expr(42_i));
 
     Inspector& inspector = Build();
@@ -1013,9 +1013,9 @@
 
 TEST_F(InspectorGetConstantIDsTest, Float) {
     AddOverridableConstantWithID("foo", 1, ty.f32(), nullptr);
-    AddOverridableConstantWithID("bar", 20, ty.f32(), Expr(0.0f));
-    AddOverridableConstantWithID("baz", 300, ty.f32(), Expr(-10.0f));
-    AddOverridableConstantWithID("x", 4000, ty.f32(), Expr(15.0f));
+    AddOverridableConstantWithID("bar", 20, ty.f32(), Expr(0_f));
+    AddOverridableConstantWithID("baz", 300, ty.f32(), Expr(-10_f));
+    AddOverridableConstantWithID("x", 4000, ty.f32(), Expr(15_f));
 
     Inspector& inspector = Build();
 
@@ -1027,15 +1027,15 @@
 
     ASSERT_TRUE(result.find(20) != result.end());
     EXPECT_TRUE(result[20].IsFloat());
-    EXPECT_FLOAT_EQ(0.0, result[20].AsFloat());
+    EXPECT_FLOAT_EQ(0.0f, result[20].AsFloat());
 
     ASSERT_TRUE(result.find(300) != result.end());
     EXPECT_TRUE(result[300].IsFloat());
-    EXPECT_FLOAT_EQ(-10.0, result[300].AsFloat());
+    EXPECT_FLOAT_EQ(-10.0f, result[300].AsFloat());
 
     ASSERT_TRUE(result.find(4000) != result.end());
     EXPECT_TRUE(result[4000].IsFloat());
-    EXPECT_FLOAT_EQ(15.0, result[4000].AsFloat());
+    EXPECT_FLOAT_EQ(15.0f, result[4000].AsFloat());
 }
 
 TEST_F(InspectorGetConstantNameToIdMapTest, WithAndWithoutIds) {
diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index cebbd55..0bebe4b 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -300,6 +300,8 @@
 fn distance(f32, f32) -> f32
 fn distance<N: num>(vec<N, f32>, vec<N, f32>) -> f32
 fn dot<N: num, T: fiu32>(vec<N, T>, vec<N, T>) -> T
+fn dot4I8Packed(u32, u32) -> i32
+fn dot4U8Packed(u32, u32) -> u32
 [[stage("fragment")]] fn dpdx(f32) -> f32
 [[stage("fragment")]] fn dpdx<N: num>(vec<N, f32>) -> vec<N, f32>
 [[stage("fragment")]] fn dpdxCoarse(f32) -> f32
diff --git a/src/tint/number.h b/src/tint/number.h
index 165a00a..a4bd369 100644
--- a/src/tint/number.h
+++ b/src/tint/number.h
@@ -16,6 +16,7 @@
 #define SRC_TINT_NUMBER_H_
 
 #include <stdint.h>
+#include <functional>
 
 namespace tint {
 
@@ -27,12 +28,22 @@
 
     /// Constructor.
     /// @param v the value to initialize this Number to
-    explicit Number(T v) : value(v) {}
+    template <typename U>
+    explicit Number(U v) : value(static_cast<T>(v)) {}
+
+    /// Constructor.
+    /// @param v the value to initialize this Number to
+    template <typename U>
+    explicit Number(Number<U> v) : value(static_cast<T>(v.value)) {}
 
     /// Conversion operator
     /// @returns the value as T
     operator T() const { return value; }
 
+    /// Negation operator
+    /// @returns the negative value of the number
+    Number operator-() const { return Number(-value); }
+
     /// Assignment operator
     /// @param v the new value
     /// @returns this Number so calls can be chained
@@ -47,30 +58,46 @@
 
 template <typename A, typename B>
 bool operator==(Number<A> a, Number<B> b) {
-    return a.value == b.value;
+    using T = decltype(a.value + b.value);
+    return std::equal_to<T>()(a.value, b.value);
 }
 
 template <typename A, typename B>
 bool operator==(Number<A> a, B b) {
-    return a.value == b;
+    return a == Number<B>(b);
 }
 
 template <typename A, typename B>
 bool operator==(A a, Number<B> b) {
-    return a == b.value;
+    return Number<A>(a) == b;
 }
 
+/// `AInt` is a type alias to `Number<int64_t>`.
+using AInt = Number<int64_t>;
+/// `AFloat` is a type alias to `Number<double>`.
+using AFloat = Number<double>;
+
 /// `i32` is a type alias to `Number<int32_t>`.
 using i32 = Number<int32_t>;
 /// `u32` is a type alias to `Number<uint32_t>`.
 using u32 = Number<uint32_t>;
-/// `f32` is a type alias to `float`
-using f32 = float;
+/// `f32` is a type alias to `Number<float>`
+using f32 = Number<float>;
 
 }  // namespace tint
 
 namespace tint::number_suffixes {
 
+/// Literal suffix for abstract integer literals
+inline AInt operator"" _a(unsigned long long int value) {  // NOLINT
+    return AInt(static_cast<int64_t>(value));
+}
+
+/// Literal suffix for abstract float literals
+inline AFloat operator"" _a(long double value) {  // NOLINT
+    return AFloat(static_cast<double>(value));
+}
+
 /// Literal suffix for i32 literals
 inline i32 operator"" _i(unsigned long long int value) {  // NOLINT
     return i32(static_cast<int32_t>(value));
@@ -81,6 +108,16 @@
     return u32(static_cast<uint32_t>(value));
 }
 
+/// Literal suffix for f32 literals
+inline f32 operator"" _f(long double value) {  // NOLINT
+    return f32(static_cast<double>(value));
+}
+
+/// Literal suffix for f32 literals
+inline f32 operator"" _f(unsigned long long int value) {  // NOLINT
+    return f32(static_cast<double>(value));
+}
+
 }  // namespace tint::number_suffixes
 
 #endif  // SRC_TINT_NUMBER_H_
diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h
index 088efc9..7dd2c81 100644
--- a/src/tint/program_builder.h
+++ b/src/tint/program_builder.h
@@ -974,53 +974,89 @@
     /// @param source the source information
     /// @param value the boolean value
     /// @return a Scalar constructor for the given value
-    const ast::BoolLiteralExpression* Expr(const Source& source, bool value) {
+    template <typename BOOL>
+    std::enable_if_t<std::is_same_v<BOOL, bool>, const ast::BoolLiteralExpression*> Expr(
+        const Source& source,
+        BOOL value) {
         return create<ast::BoolLiteralExpression>(source, value);
     }
 
     /// @param value the boolean value
     /// @return a Scalar constructor for the given value
-    const ast::BoolLiteralExpression* Expr(bool value) {
+    template <typename BOOL>
+    std::enable_if_t<std::is_same_v<BOOL, bool>, const ast::BoolLiteralExpression*> Expr(
+        BOOL value) {
         return create<ast::BoolLiteralExpression>(value);
     }
 
     /// @param source the source information
     /// @param value the float value
-    /// @return a Scalar constructor for the given value
+    /// @return a 'f'-suffixed FloatLiteralExpression for the f32 value
     const ast::FloatLiteralExpression* Expr(const Source& source, f32 value) {
-        return create<ast::FloatLiteralExpression>(source, value);
+        return create<ast::FloatLiteralExpression>(source, static_cast<double>(value.value),
+                                                   ast::FloatLiteralExpression::Suffix::kF);
     }
 
     /// @param value the float value
-    /// @return a Scalar constructor for the given value
+    /// @return a 'f'-suffixed FloatLiteralExpression for the f32 value
     const ast::FloatLiteralExpression* Expr(f32 value) {
-        return create<ast::FloatLiteralExpression>(value);
+        return create<ast::FloatLiteralExpression>(static_cast<double>(value.value),
+                                                   ast::FloatLiteralExpression::Suffix::kF);
     }
 
     /// @param source the source information
     /// @param value the integer value
-    /// @return a 'i'-suffixed IntLiteralExpression for the given value
+    /// @return an unsuffixed IntLiteralExpression for the AInt value
+    const ast::IntLiteralExpression* Expr(const Source& source, AInt value) {
+        return create<ast::IntLiteralExpression>(source, value,
+                                                 ast::IntLiteralExpression::Suffix::kNone);
+    }
+
+    /// @param value the integer value
+    /// @return an unsuffixed IntLiteralExpression for the AInt value
+    const ast::IntLiteralExpression* Expr(AInt value) {
+        return create<ast::IntLiteralExpression>(value, ast::IntLiteralExpression::Suffix::kNone);
+    }
+
+    /// @param source the source information
+    /// @param value the integer value
+    /// @return an unsuffixed FloatLiteralExpression for the AFloat value
+    const ast::FloatLiteralExpression* Expr(const Source& source, AFloat value) {
+        return create<ast::FloatLiteralExpression>(source, value.value,
+                                                   ast::FloatLiteralExpression::Suffix::kNone);
+    }
+
+    /// @param value the integer value
+    /// @return an unsuffixed FloatLiteralExpression for the AFloat value
+    const ast::FloatLiteralExpression* Expr(AFloat value) {
+        return create<ast::FloatLiteralExpression>(value.value,
+                                                   ast::FloatLiteralExpression::Suffix::kNone);
+    }
+
+    /// @param source the source information
+    /// @param value the integer value
+    /// @return a signed 'i'-suffixed IntLiteralExpression for the i32 value
     const ast::IntLiteralExpression* Expr(const Source& source, i32 value) {
         return create<ast::IntLiteralExpression>(source, value,
                                                  ast::IntLiteralExpression::Suffix::kI);
     }
 
     /// @param value the integer value
-    /// @return a 'i'-suffixed IntLiteralExpression for the given value
+    /// @return a signed 'i'-suffixed IntLiteralExpression for the i32 value
     const ast::IntLiteralExpression* Expr(i32 value) {
         return create<ast::IntLiteralExpression>(value, ast::IntLiteralExpression::Suffix::kI);
     }
 
     /// @param source the source information
     /// @param value the unsigned int value
-    /// @return a 'u'-suffixed IntLiteralExpression for the given value
+    /// @return an unsigned 'u'-suffixed IntLiteralExpression for the u32 value
     const ast::IntLiteralExpression* Expr(const Source& source, u32 value) {
         return create<ast::IntLiteralExpression>(source, value,
                                                  ast::IntLiteralExpression::Suffix::kU);
     }
 
     /// @param value the unsigned int value
-    /// @return a 'u'-suffixed IntLiteralExpression for the given value
+    /// @return an unsigned 'u'-suffixed IntLiteralExpression for the u32 value
     const ast::IntLiteralExpression* Expr(u32 value) {
         return create<ast::IntLiteralExpression>(value, ast::IntLiteralExpression::Suffix::kU);
     }
diff --git a/src/tint/reader/spirv/function.cc b/src/tint/reader/spirv/function.cc
index b416a6a..82f6224 100644
--- a/src/tint/reader/spirv/function.cc
+++ b/src/tint/reader/spirv/function.cc
@@ -137,6 +137,8 @@
 //           constructs
 //
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::reader::spirv {
 
 namespace {
@@ -2499,7 +2501,8 @@
             return source_expr;
         }
         case SkipReason::kPointSizeBuiltinValue: {
-            return {ty_.F32(), create<ast::FloatLiteralExpression>(Source{}, 1.0f)};
+            return {ty_.F32(), create<ast::FloatLiteralExpression>(
+                                   Source{}, 1.0, ast::FloatLiteralExpression::Suffix::kF)};
         }
         case SkipReason::kPointSizeBuiltinPointer:
             Fail() << "unhandled use of a pointer to the PointSize builtin, with ID: " << id;
@@ -3928,7 +3931,7 @@
             case GLSLstd450Normalize:
                 // WGSL does not have scalar form of the normalize builtin.
                 // The answer would be 1 anyway, so return that directly.
-                return {ty_.F32(), builder_.Expr(1.0f)};
+                return {ty_.F32(), builder_.Expr(1_f)};
 
             case GLSLstd450FaceForward: {
                 // If dot(Nref, Incident) < 0, the result is Normal, otherwise -Normal.
@@ -3951,7 +3954,7 @@
                                                 create<ast::BinaryExpression>(
                                                     Source{}, ast::BinaryOp::kLessThan,
                                                     builder_.Mul({}, incident.expr, nref.expr),
-                                                    builder_.Expr(0.0f))})};
+                                                    builder_.Expr(0_f))})};
             }
 
             case GLSLstd450Reflect: {
@@ -3960,12 +3963,12 @@
                 auto normal = MakeOperand(inst, 3);
                 TINT_ASSERT(Reader, incident.type->Is<F32>());
                 TINT_ASSERT(Reader, normal.type->Is<F32>());
-                return {ty_.F32(),
-                        builder_.Sub(
-                            incident.expr,
-                            builder_.Mul(2.0f,
-                                         builder_.Mul(normal.expr,
-                                                      builder_.Mul(normal.expr, incident.expr))))};
+                return {
+                    ty_.F32(),
+                    builder_.Sub(
+                        incident.expr,
+                        builder_.Mul(2_f, builder_.Mul(normal.expr,
+                                                       builder_.Mul(normal.expr, incident.expr))))};
             }
 
             case GLSLstd450Refract: {
@@ -3982,13 +3985,13 @@
                     return {};
                 }
                 const Type* f32 = eta.type;
-                return {f32,
-                        builder_.MemberAccessor(
-                            builder_.Call(Source{}, "refract",
-                                          ast::ExpressionList{
-                                              builder_.vec2<float>(incident.expr, 0.0f),
-                                              builder_.vec2<float>(normal.expr, 0.0f), eta.expr}),
-                            "x")};
+                return {f32, builder_.MemberAccessor(
+                                 builder_.Call(
+                                     Source{}, "refract",
+                                     ast::ExpressionList{
+                                         builder_.vec2<tint::f32>(incident.expr, 0_f),
+                                         builder_.vec2<tint::f32>(normal.expr, 0_f), eta.expr}),
+                                 "x")};
             }
             default:
                 break;
diff --git a/src/tint/reader/spirv/parser_impl.cc b/src/tint/reader/spirv/parser_impl.cc
index 28dc856..bdc52e6 100644
--- a/src/tint/reader/spirv/parser_impl.cc
+++ b/src/tint/reader/spirv/parser_impl.cc
@@ -1343,7 +1343,9 @@
                         float float_value;
                         // Copy the bits so we can read them as a float.
                         std::memcpy(&float_value, &literal_value, sizeof(float_value));
-                        return create<ast::FloatLiteralExpression>(Source{}, float_value);
+                        return create<ast::FloatLiteralExpression>(
+                            Source{}, static_cast<double>(float_value),
+                            ast::FloatLiteralExpression::Suffix::kF);
                     });
                 if (ast_expr == nullptr) {
                     return Fail() << " invalid result type for OpSpecConstant "
@@ -1905,18 +1907,22 @@
     return Switch(
         ast_type,
         [&](const I32*) {
-            return TypedExpression{ty_.I32(), create<ast::IntLiteralExpression>(
-                                                  source, spirv_const->GetS32(),
-                                                  ast::IntLiteralExpression::Suffix::kI)};
+            return TypedExpression{ty_.I32(),
+                                   create<ast::IntLiteralExpression>(
+                                       source, static_cast<int64_t>(spirv_const->GetS32()),
+                                       ast::IntLiteralExpression::Suffix::kI)};
         },
         [&](const U32*) {
-            return TypedExpression{ty_.U32(), create<ast::IntLiteralExpression>(
-                                                  source, spirv_const->GetU32(),
-                                                  ast::IntLiteralExpression::Suffix::kU)};
+            return TypedExpression{ty_.U32(),
+                                   create<ast::IntLiteralExpression>(
+                                       source, static_cast<int64_t>(spirv_const->GetU32()),
+                                       ast::IntLiteralExpression::Suffix::kU)};
         },
         [&](const F32*) {
-            return TypedExpression{
-                ty_.F32(), create<ast::FloatLiteralExpression>(source, spirv_const->GetFloat())};
+            return TypedExpression{ty_.F32(),
+                                   create<ast::FloatLiteralExpression>(
+                                       source, static_cast<double>(spirv_const->GetFloat()),
+                                       ast::FloatLiteralExpression::Suffix::kF)};
         },
         [&](const Bool*) {
             const bool value =
@@ -1953,7 +1959,10 @@
             return create<ast::IntLiteralExpression>(Source{}, 0,
                                                      ast::IntLiteralExpression::Suffix::kU);
         },
-        [&](const F32*) { return create<ast::FloatLiteralExpression>(Source{}, 0.0f); },
+        [&](const F32*) {
+            return create<ast::FloatLiteralExpression>(Source{}, 0,
+                                                       ast::FloatLiteralExpression::Suffix::kF);
+        },
         [&](const Vector*) { return builder_.Construct(Source{}, type->Build(builder_)); },
         [&](const Matrix*) { return builder_.Construct(Source{}, type->Build(builder_)); },
         [&](const Array*) { return builder_.Construct(Source{}, type->Build(builder_)); },
diff --git a/src/tint/reader/wgsl/lexer.cc b/src/tint/reader/wgsl/lexer.cc
index d9a9f34..db75613 100644
--- a/src/tint/reader/wgsl/lexer.cc
+++ b/src/tint/reader/wgsl/lexer.cc
@@ -94,7 +94,7 @@
 template <typename T>
 LimitCheck check_limits(int64_t value) {
     static_assert(std::is_integral_v<T>, "T must be an integer");
-    if (value < static_cast<int64_t>(std::numeric_limits<T>::min())) {
+    if (value < static_cast<int64_t>(std::numeric_limits<T>::lowest())) {
         return LimitCheck::kTooSmall;
     }
     if (value > static_cast<int64_t>(std::numeric_limits<T>::max())) {
@@ -103,6 +103,19 @@
     return LimitCheck::kWithinLimits;
 }
 
+/// Checks whether the value fits within the floating point type `T`
+template <typename T>
+LimitCheck check_limits(double value) {
+    static_assert(std::is_floating_point_v<T>, "T must be a floating point");
+    if (value < static_cast<double>(std::numeric_limits<T>::lowest())) {
+        return LimitCheck::kTooSmall;
+    }
+    if (value > static_cast<double>(std::numeric_limits<T>::max())) {
+        return LimitCheck::kTooLarge;
+    }
+    return LimitCheck::kWithinLimits;
+}
+
 }  // namespace
 
 Lexer::Lexer(const Source::File* file) : file_(file), location_{1, 1} {}
@@ -378,23 +391,40 @@
     advance(end - start);
     end_source(source);
 
-    auto res = strtod(&at(start), nullptr);
-    // This errors out if a non-zero magnitude is too small to represent in a
-    // float. It can't be represented faithfully in an f32.
-    const auto magnitude = std::fabs(res);
-    if (0.0 < magnitude && magnitude < static_cast<double>(std::numeric_limits<float>::min())) {
-        return {Token::Type::kError, source,
-                "f32 (" + str + ") magnitude too small, not representable"};
-    }
-    // This handles if the number is really large negative number
-    if (res < static_cast<double>(std::numeric_limits<float>::lowest())) {
-        return {Token::Type::kError, source, "f32 (" + str + ") too large (negative)"};
-    }
-    if (res > static_cast<double>(std::numeric_limits<float>::max())) {
-        return {Token::Type::kError, source, "f32 (" + str + ") too large (positive)"};
+    double value = strtod(&at(start), nullptr);
+    const double magnitude = std::abs(value);
+
+    if (has_f_suffix) {
+        // This errors out if a non-zero magnitude is too small to represent in a
+        // float. It can't be represented faithfully in an f32.
+        if (0.0 < magnitude && magnitude < static_cast<double>(std::numeric_limits<float>::min())) {
+            return {Token::Type::kError, source, "magnitude too small to be represented as f32"};
+        }
+        switch (check_limits<float>(value)) {
+            case LimitCheck::kTooSmall:
+                return {Token::Type::kError, source, "value too small for f32"};
+            case LimitCheck::kTooLarge:
+                return {Token::Type::kError, source, "value too large for f32"};
+            default:
+                return {Token::Type::kFloatLiteral_F, source, value};
+        }
     }
 
-    return {source, static_cast<float>(res)};
+    // TODO(crbug.com/tint/1504): Properly support abstract float:
+    // Change `AbstractFloatType` to `double`, update errors to say 'abstract int'.
+    using AbstractFloatType = float;
+    if (0.0 < magnitude &&
+        magnitude < static_cast<double>(std::numeric_limits<AbstractFloatType>::min())) {
+        return {Token::Type::kError, source, "magnitude too small to be represented as f32"};
+    }
+    switch (check_limits<AbstractFloatType>(value)) {
+        case LimitCheck::kTooSmall:
+            return {Token::Type::kError, source, "value too small for f32"};
+        case LimitCheck::kTooLarge:
+            return {Token::Type::kError, source, "value too large for f32"};
+        default:
+            return {Token::Type::kFloatLiteral, source, value};
+    }
 }
 
 Token Lexer::try_hex_float() {
@@ -566,6 +596,7 @@
     uint32_t input_exponent = 0;  // Defaults to 0 if not present
     int32_t exponent_sign = 1;
     // If the 'p' part is present, the rest of the exponent must exist.
+    bool has_f_suffix = false;
     if (has_exponent) {
         // Parse the rest of the exponent.
         // (+|-)?
@@ -597,6 +628,7 @@
         // when the exponent is present. Otherwise it will look like
         // one of the mantissa digits.
         if (end < length() && matches(end, "f")) {
+            has_f_suffix = true;
             end++;
         }
 
@@ -680,44 +712,41 @@
     result_u32 |= (static_cast<uint32_t>(signed_exponent) & kExponentMask) << kExponentLeftShift;
 
     // Reinterpret as float and return
-    float result;
-    std::memcpy(&result, &result_u32, sizeof(result));
-    return {source, static_cast<float>(result)};
+    float result_f32;
+    std::memcpy(&result_f32, &result_u32, sizeof(result_f32));
+    double result_f64 = static_cast<double>(result_f32);
+    return {has_f_suffix ? Token::Type::kFloatLiteral_F : Token::Type::kFloatLiteral, source,
+            result_f64};
 }
 
-Token Lexer::build_token_from_int_if_possible(Source source,
-                                              size_t start,
-                                              size_t end,
-                                              int32_t base) {
+Token Lexer::build_token_from_int_if_possible(Source source, size_t start, int32_t base) {
     int64_t res = strtoll(&at(start), nullptr, base);
 
-    auto str = [&] { return std::string{substr(start, end - start)}; };
-
     if (matches(pos(), "u")) {
         switch (check_limits<uint32_t>(res)) {
             case LimitCheck::kTooSmall:
                 return {Token::Type::kError, source, "unsigned literal cannot be negative"};
             case LimitCheck::kTooLarge:
-                return {Token::Type::kError, source, str() + " too large for u32"};
+                return {Token::Type::kError, source, "value too large for u32"};
             default:
                 advance(1);
                 end_source(source);
-                return {Token::Type::kIntULiteral, source, res};
+                return {Token::Type::kIntLiteral_U, source, res};
         }
     }
 
     if (matches(pos(), "i")) {
         switch (check_limits<int32_t>(res)) {
             case LimitCheck::kTooSmall:
-                return {Token::Type::kError, source, str() + " too small for i32"};
+                return {Token::Type::kError, source, "value too small for i32"};
             case LimitCheck::kTooLarge:
-                return {Token::Type::kError, source, str() + " too large for i32"};
+                return {Token::Type::kError, source, "value too large for i32"};
             default:
                 break;
         }
         advance(1);
         end_source(source);
-        return {Token::Type::kIntILiteral, source, res};
+        return {Token::Type::kIntLiteral_I, source, res};
     }
 
     // TODO(crbug.com/tint/1504): Properly support abstract int:
@@ -725,9 +754,9 @@
     using AbstractIntType = int32_t;
     switch (check_limits<AbstractIntType>(res)) {
         case LimitCheck::kTooSmall:
-            return {Token::Type::kError, source, str() + " too small for i32"};
+            return {Token::Type::kError, source, "value too small for i32"};
         case LimitCheck::kTooLarge:
-            return {Token::Type::kError, source, str() + " too large for i32"};
+            return {Token::Type::kError, source, "value too large for i32"};
         default:
             end_source(source);
             return {Token::Type::kIntLiteral, source, res};
@@ -769,7 +798,7 @@
 
     advance(end - start);
 
-    return build_token_from_int_if_possible(source, start, end, 16);
+    return build_token_from_int_if_possible(source, start, 16);
 }
 
 Token Lexer::try_integer() {
@@ -812,7 +841,7 @@
 
     advance(end - start);
 
-    return build_token_from_int_if_possible(source, start, end, 10);
+    return build_token_from_int_if_possible(source, start, 10);
 }
 
 Token Lexer::try_ident() {
diff --git a/src/tint/reader/wgsl/lexer.h b/src/tint/reader/wgsl/lexer.h
index 11ac9cf..d93848f 100644
--- a/src/tint/reader/wgsl/lexer.h
+++ b/src/tint/reader/wgsl/lexer.h
@@ -43,7 +43,8 @@
     /// @returns uninitialized token on success, or error
     Token skip_comment();
 
-    Token build_token_from_int_if_possible(Source source, size_t start, size_t end, int32_t base);
+    Token build_token_from_int_if_possible(Source source, size_t start, int32_t base);
+
     Token check_keyword(const Source&, std::string_view);
 
     /// The try_* methods have the following in common:
diff --git a/src/tint/reader/wgsl/lexer_test.cc b/src/tint/reader/wgsl/lexer_test.cc
index 6bcea15..0c3e162 100644
--- a/src/tint/reader/wgsl/lexer_test.cc
+++ b/src/tint/reader/wgsl/lexer_test.cc
@@ -303,7 +303,7 @@
 
 struct FloatData {
     const char* input;
-    float result;
+    double result;
 };
 inline std::ostream& operator<<(std::ostream& out, FloatData data) {
     out << std::string(data.input);
@@ -316,8 +316,12 @@
     Lexer l(&file);
 
     auto t = l.next();
-    EXPECT_TRUE(t.Is(Token::Type::kFloatLiteral));
-    EXPECT_EQ(t.to_f32(), params.result);
+    if (std::string(params.input).back() == 'f') {
+        EXPECT_TRUE(t.Is(Token::Type::kFloatLiteral_F));
+    } else {
+        EXPECT_TRUE(t.Is(Token::Type::kFloatLiteral));
+    }
+    EXPECT_EQ(t.to_f64(), params.result);
     EXPECT_EQ(t.source().range.begin.line, 1u);
     EXPECT_EQ(t.source().range.begin.column, 1u);
     EXPECT_EQ(t.source().range.end.line, 1u);
@@ -330,63 +334,63 @@
                          FloatTest,
                          testing::Values(
                              // No decimal, with 'f' suffix
-                             FloatData{"0f", 0.0f},
-                             FloatData{"1f", 1.0f},
-                             FloatData{"-0f", 0.0f},
-                             FloatData{"-1f", -1.0f},
+                             FloatData{"0f", 0.0},
+                             FloatData{"1f", 1.0},
+                             FloatData{"-0f", 0.0},
+                             FloatData{"-1f", -1.0},
 
                              // Zero, with decimal.
-                             FloatData{"0.0", 0.0f},
-                             FloatData{"0.", 0.0f},
-                             FloatData{".0", 0.0f},
-                             FloatData{"-0.0", 0.0f},
-                             FloatData{"-0.", 0.0f},
-                             FloatData{"-.0", 0.0f},
+                             FloatData{"0.0", 0.0},
+                             FloatData{"0.", 0.0},
+                             FloatData{".0", 0.0},
+                             FloatData{"-0.0", 0.0},
+                             FloatData{"-0.", 0.0},
+                             FloatData{"-.0", 0.0},
                              // Zero, with decimal and 'f' suffix
-                             FloatData{"0.0f", 0.0f},
-                             FloatData{"0.f", 0.0f},
-                             FloatData{".0f", 0.0f},
-                             FloatData{"-0.0f", 0.0f},
-                             FloatData{"-0.f", 0.0f},
-                             FloatData{"-.0", 0.0f},
+                             FloatData{"0.0f", 0.0},
+                             FloatData{"0.f", 0.0},
+                             FloatData{".0f", 0.0},
+                             FloatData{"-0.0f", 0.0},
+                             FloatData{"-0.f", 0.0},
+                             FloatData{"-.0", 0.0},
 
                              // Non-zero with decimal
-                             FloatData{"5.7", 5.7f},
-                             FloatData{"5.", 5.f},
-                             FloatData{".7", .7f},
-                             FloatData{"-5.7", -5.7f},
-                             FloatData{"-5.", -5.f},
-                             FloatData{"-.7", -.7f},
+                             FloatData{"5.7", 5.7},
+                             FloatData{"5.", 5.},
+                             FloatData{".7", .7},
+                             FloatData{"-5.7", -5.7},
+                             FloatData{"-5.", -5.},
+                             FloatData{"-.7", -.7},
                              // Non-zero with decimal and 'f' suffix
-                             FloatData{"5.7f", 5.7f},
-                             FloatData{"5.f", 5.f},
-                             FloatData{".7f", .7f},
-                             FloatData{"-5.7f", -5.7f},
-                             FloatData{"-5.f", -5.f},
-                             FloatData{"-.7f", -.7f},
+                             FloatData{"5.7f", 5.7},
+                             FloatData{"5.f", 5.},
+                             FloatData{".7f", .7},
+                             FloatData{"-5.7f", -5.7},
+                             FloatData{"-5.f", -5.},
+                             FloatData{"-.7f", -.7},
 
                              // No decimal, with exponent
-                             FloatData{"1e5", 1e5f},
-                             FloatData{"1E5", 1e5f},
-                             FloatData{"1e-5", 1e-5f},
-                             FloatData{"1E-5", 1e-5f},
+                             FloatData{"1e5", 1e5},
+                             FloatData{"1E5", 1e5},
+                             FloatData{"1e-5", 1e-5},
+                             FloatData{"1E-5", 1e-5},
                              // No decimal, with exponent and 'f' suffix
-                             FloatData{"1e5f", 1e5f},
-                             FloatData{"1E5f", 1e5f},
-                             FloatData{"1e-5f", 1e-5f},
-                             FloatData{"1E-5f", 1e-5f},
+                             FloatData{"1e5f", 1e5},
+                             FloatData{"1E5f", 1e5},
+                             FloatData{"1e-5f", 1e-5},
+                             FloatData{"1E-5f", 1e-5},
                              // With decimal and exponents
-                             FloatData{"0.2e+12", 0.2e12f},
-                             FloatData{"1.2e-5", 1.2e-5f},
-                             FloatData{"2.57e23", 2.57e23f},
-                             FloatData{"2.5e+0", 2.5f},
-                             FloatData{"2.5e-0", 2.5f},
+                             FloatData{"0.2e+12", 0.2e12},
+                             FloatData{"1.2e-5", 1.2e-5},
+                             FloatData{"2.57e23", 2.57e23},
+                             FloatData{"2.5e+0", 2.5},
+                             FloatData{"2.5e-0", 2.5},
                              // With decimal and exponents and 'f' suffix
-                             FloatData{"0.2e+12f", 0.2e12f},
-                             FloatData{"1.2e-5f", 1.2e-5f},
-                             FloatData{"2.57e23f", 2.57e23f},
-                             FloatData{"2.5e+0f", 2.5f},
-                             FloatData{"2.5e-0f", 2.5f}));
+                             FloatData{"0.2e+12f", 0.2e12},
+                             FloatData{"1.2e-5f", 1.2e-5},
+                             FloatData{"2.57e23f", 2.57e23},
+                             FloatData{"2.5e+0f", 2.5},
+                             FloatData{"2.5e-0f", 2.5}));
 
 using FloatTest_Invalid = testing::TestWithParam<const char*>;
 TEST_P(FloatTest_Invalid, Handles) {
@@ -607,7 +611,7 @@
     Lexer l(&file);
 
     auto t = l.next();
-    EXPECT_TRUE(t.Is(Token::Type::kIntILiteral));
+    EXPECT_TRUE(t.Is(Token::Type::kIntLiteral_I));
     EXPECT_EQ(t.source().range.begin.line, 1u);
     EXPECT_EQ(t.source().range.begin.column, 1u);
     EXPECT_EQ(t.source().range.end.line, 1u);
@@ -676,7 +680,7 @@
 
     auto t = l.next();
     ASSERT_TRUE(t.Is(Token::Type::kError));
-    EXPECT_EQ(t.to_str(), "0x80000000 too large for i32");
+    EXPECT_EQ(t.to_str(), "value too large for i32");
 }
 
 TEST_F(LexerTest, IntegerTest_HexSignedTooSmall) {
@@ -685,7 +689,7 @@
 
     auto t = l.next();
     ASSERT_TRUE(t.Is(Token::Type::kError));
-    EXPECT_EQ(t.to_str(), "-0x8000000F too small for i32");
+    EXPECT_EQ(t.to_str(), "value too small for i32");
 }
 
 TEST_F(LexerTest, IntegerTest_HexSignedTooManyDigits) {
@@ -723,7 +727,7 @@
     Lexer l(&file);
 
     auto t = l.next();
-    EXPECT_TRUE(t.Is(Token::Type::kIntULiteral));
+    EXPECT_TRUE(t.Is(Token::Type::kIntLiteral_U));
     EXPECT_EQ(t.source().range.begin.line, 1u);
     EXPECT_EQ(t.source().range.begin.column, 1u);
     EXPECT_EQ(t.source().range.end.line, 1u);
@@ -766,7 +770,7 @@
     Lexer l(&file);
 
     auto t = l.next();
-    EXPECT_TRUE(t.Is(Token::Type::kIntULiteral));
+    EXPECT_TRUE(t.Is(Token::Type::kIntLiteral_U));
     EXPECT_EQ(t.to_i64(), params.result);
     EXPECT_EQ(t.source().range.begin.line, 1u);
     EXPECT_EQ(t.source().range.begin.column, 1u);
@@ -835,8 +839,8 @@
 
     auto t = l.next();
     EXPECT_FALSE(t.Is(Token::Type::kIntLiteral));
-    EXPECT_FALSE(t.Is(Token::Type::kIntULiteral));
-    EXPECT_FALSE(t.Is(Token::Type::kIntILiteral));
+    EXPECT_FALSE(t.Is(Token::Type::kIntLiteral_U));
+    EXPECT_FALSE(t.Is(Token::Type::kIntLiteral_I));
 }
 INSTANTIATE_TEST_SUITE_P(
     LexerTest,
diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc
index 8661a00..b2b9a03 100644
--- a/src/tint/reader/wgsl/parser_impl.cc
+++ b/src/tint/reader/wgsl/parser_impl.cc
@@ -2781,16 +2781,21 @@
         return create<ast::IntLiteralExpression>(t.source(), t.to_i64(),
                                                  ast::IntLiteralExpression::Suffix::kNone);
     }
-    if (match(Token::Type::kIntILiteral)) {
+    if (match(Token::Type::kIntLiteral_I)) {
         return create<ast::IntLiteralExpression>(t.source(), t.to_i64(),
                                                  ast::IntLiteralExpression::Suffix::kI);
     }
-    if (match(Token::Type::kIntULiteral)) {
+    if (match(Token::Type::kIntLiteral_U)) {
         return create<ast::IntLiteralExpression>(t.source(), t.to_i64(),
                                                  ast::IntLiteralExpression::Suffix::kU);
     }
     if (match(Token::Type::kFloatLiteral)) {
-        return create<ast::FloatLiteralExpression>(t.source(), t.to_f32());
+        return create<ast::FloatLiteralExpression>(t.source(), t.to_f64(),
+                                                   ast::FloatLiteralExpression::Suffix::kNone);
+    }
+    if (match(Token::Type::kFloatLiteral_F)) {
+        return create<ast::FloatLiteralExpression>(t.source(), t.to_f64(),
+                                                   ast::FloatLiteralExpression::Suffix::kF);
     }
     if (match(Token::Type::kTrue)) {
         return create<ast::BoolLiteralExpression>(t.source(), true);
@@ -3126,7 +3131,7 @@
 
 Expect<int32_t> ParserImpl::expect_sint(std::string_view use) {
     auto t = peek();
-    if (!t.Is(Token::Type::kIntLiteral) && !t.Is(Token::Type::kIntILiteral)) {
+    if (!t.Is(Token::Type::kIntLiteral) && !t.Is(Token::Type::kIntLiteral_I)) {
         return add_error(t.source(), "expected signed integer literal", use);
     }
 
diff --git a/src/tint/reader/wgsl/parser_impl_const_expr_test.cc b/src/tint/reader/wgsl/parser_impl_const_expr_test.cc
index 9d58058..80536bd 100644
--- a/src/tint/reader/wgsl/parser_impl_const_expr_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_const_expr_test.cc
@@ -31,10 +31,14 @@
     ASSERT_EQ(t->args.size(), 2u);
 
     ASSERT_TRUE(t->args[0]->Is<ast::FloatLiteralExpression>());
-    EXPECT_FLOAT_EQ(t->args[0]->As<ast::FloatLiteralExpression>()->value, 1.);
+    EXPECT_DOUBLE_EQ(t->args[0]->As<ast::FloatLiteralExpression>()->value, 1.);
+    EXPECT_EQ(t->args[0]->As<ast::FloatLiteralExpression>()->suffix,
+              ast::FloatLiteralExpression::Suffix::kNone);
 
     ASSERT_TRUE(t->args[1]->Is<ast::FloatLiteralExpression>());
-    EXPECT_FLOAT_EQ(t->args[1]->As<ast::FloatLiteralExpression>()->value, 2.);
+    EXPECT_DOUBLE_EQ(t->args[1]->As<ast::FloatLiteralExpression>()->value, 2.);
+    EXPECT_EQ(t->args[1]->As<ast::FloatLiteralExpression>()->suffix,
+              ast::FloatLiteralExpression::Suffix::kNone);
 }
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl_Empty) {
diff --git a/src/tint/reader/wgsl/parser_impl_const_literal_test.cc b/src/tint/reader/wgsl/parser_impl_const_literal_test.cc
index 3e37092..cbddce3 100644
--- a/src/tint/reader/wgsl/parser_impl_const_literal_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_const_literal_test.cc
@@ -26,7 +26,7 @@
 // - 0 sign if sign is 0, 1 otherwise
 // - 'exponent_bits' is placed in the exponent space.
 //   So, the exponent bias must already be included.
-float MakeFloat(int sign, int biased_exponent, int mantissa) {
+float MakeFloat(uint32_t sign, uint32_t biased_exponent, uint32_t mantissa) {
     const uint32_t sign_bit = sign ? 0x80000000u : 0u;
     // The binary32 exponent is 8 bits, just below the sign.
     const uint32_t exponent_bits = (biased_exponent & 0xffu) << 23;
@@ -41,6 +41,25 @@
     return result;
 }
 
+// Makes an IEEE 754 binary64 floating point number with
+// - 0 sign if sign is 0, 1 otherwise
+// - 'exponent_bits' is placed in the exponent space.
+//   So, the exponent bias must already be included.
+double MakeDouble(uint64_t sign, uint64_t biased_exponent, uint64_t mantissa) {
+    const uint64_t sign_bit = sign ? 0x8000000000000000u : 0u;
+    // The binary64 exponent is 11 bits, just below the sign.
+    const uint64_t exponent_bits = (biased_exponent & 0x7FFull) << 52;
+    // The mantissa is the bottom 52 bits.
+    const uint64_t mantissa_bits = (mantissa & 0xFFFFFFFFFFFFFull);
+
+    uint64_t bits = sign_bit | exponent_bits | mantissa_bits;
+    double result = 0.0;
+    static_assert(sizeof(result) == sizeof(bits),
+                  "expected double and uint64_t to be the same size");
+    std::memcpy(&result, &bits, sizeof(bits));
+    return result;
+}
+
 TEST_F(ParserImplTest, ConstLiteral_Int) {
     {
         auto p = parser("234");
@@ -126,10 +145,26 @@
     EXPECT_FALSE(p->has_error()) << p->error();
     ASSERT_NE(c.value, nullptr);
     ASSERT_TRUE(c->Is<ast::FloatLiteralExpression>());
-    EXPECT_FLOAT_EQ(c->As<ast::FloatLiteralExpression>()->value, 234e12f);
+    EXPECT_DOUBLE_EQ(c->As<ast::FloatLiteralExpression>()->value, 234e12);
+    EXPECT_EQ(c->As<ast::FloatLiteralExpression>()->suffix,
+              ast::FloatLiteralExpression::Suffix::kNone);
     EXPECT_EQ(c->source.range, (Source::Range{{1u, 1u}, {1u, 8u}}));
 }
 
+TEST_F(ParserImplTest, ConstLiteral_FloatF) {
+    auto p = parser("234.e12f");
+    auto c = p->const_literal();
+    EXPECT_TRUE(c.matched);
+    EXPECT_FALSE(c.errored);
+    EXPECT_FALSE(p->has_error()) << p->error();
+    ASSERT_NE(c.value, nullptr);
+    ASSERT_TRUE(c->Is<ast::FloatLiteralExpression>());
+    EXPECT_DOUBLE_EQ(c->As<ast::FloatLiteralExpression>()->value, 234e12);
+    EXPECT_EQ(c->As<ast::FloatLiteralExpression>()->suffix,
+              ast::FloatLiteralExpression::Suffix::kF);
+    EXPECT_EQ(c->source.range, (Source::Range{{1u, 1u}, {1u, 9u}}));
+}
+
 TEST_F(ParserImplTest, ConstLiteral_InvalidFloat_IncompleteExponent) {
     auto p = parser("1.0e+");
     auto c = p->const_literal();
@@ -144,7 +179,7 @@
     auto c = p->const_literal();
     EXPECT_FALSE(c.matched);
     EXPECT_TRUE(c.errored);
-    EXPECT_EQ(p->error(), "1:1: f32 (1e-256) magnitude too small, not representable");
+    EXPECT_EQ(p->error(), "1:1: magnitude too small to be represented as f32");
     ASSERT_EQ(c.value, nullptr);
 }
 
@@ -153,7 +188,7 @@
     auto c = p->const_literal();
     EXPECT_FALSE(c.matched);
     EXPECT_TRUE(c.errored);
-    EXPECT_EQ(p->error(), "1:1: f32 (-1.2e+256) too large (negative)");
+    EXPECT_EQ(p->error(), "1:1: value too small for f32");
     ASSERT_EQ(c.value, nullptr);
 }
 
@@ -162,22 +197,15 @@
     auto c = p->const_literal();
     EXPECT_FALSE(c.matched);
     EXPECT_TRUE(c.errored);
-    EXPECT_EQ(p->error(), "1:1: f32 (1.2e+256) too large (positive)");
+    EXPECT_EQ(p->error(), "1:1: value too large for f32");
     ASSERT_EQ(c.value, nullptr);
 }
 
-// Returns true if the given non-Nan float numbers are equal.
-bool FloatEqual(float a, float b) {
-    // Avoid Clang complaining about equality test on float.
-    // -Wfloat-equal.
-    return (a <= b) && (a >= b);
-}
-
 struct FloatLiteralTestCase {
     std::string input;
-    float expected;
+    double expected;
     bool operator==(const FloatLiteralTestCase& other) const {
-        return (input == other.input) && FloatEqual(expected, other.expected);
+        return (input == other.input) && std::equal_to<double>()(expected, other.expected);
     }
 };
 
@@ -197,22 +225,28 @@
     EXPECT_FALSE(p->has_error()) << p->error();
     ASSERT_NE(c.value, nullptr);
     ASSERT_TRUE(c->Is<ast::FloatLiteralExpression>());
-    EXPECT_FLOAT_EQ(c->As<ast::FloatLiteralExpression>()->value, params.expected);
+    EXPECT_DOUBLE_EQ(c->As<ast::FloatLiteralExpression>()->value, params.expected);
+    if (params.input.back() == 'f') {
+        EXPECT_EQ(c->As<ast::FloatLiteralExpression>()->suffix,
+                  ast::FloatLiteralExpression::Suffix::kF);
+    } else {
+        EXPECT_EQ(c->As<ast::FloatLiteralExpression>()->suffix,
+                  ast::FloatLiteralExpression::Suffix::kNone);
+    }
 }
-
 using FloatLiteralTestCaseList = std::vector<FloatLiteralTestCase>;
 
 FloatLiteralTestCaseList DecimalFloatCases() {
     return FloatLiteralTestCaseList{
-        {"0.0", 0.0f},                         // Zero
-        {"1.0", 1.0f},                         // One
-        {"-1.0", -1.0f},                       // MinusOne
-        {"1000000000.0", 1e9f},                // Billion
-        {"-0.0", std::copysign(0.0f, -5.0f)},  // NegativeZero
-        {"0.0", MakeFloat(0, 0, 0)},           // Zero
-        {"-0.0", MakeFloat(1, 0, 0)},          // NegativeZero
-        {"1.0", MakeFloat(0, 127, 0)},         // One
-        {"-1.0", MakeFloat(1, 127, 0)},        // NegativeOne
+        {"0.0", 0.0},                        // Zero
+        {"1.0", 1.0},                        // One
+        {"-1.0", -1.0},                      // MinusOne
+        {"1000000000.0", 1e9},               // Billion
+        {"-0.0", std::copysign(0.0, -5.0)},  // NegativeZero
+        {"0.0", MakeDouble(0, 0, 0)},        // Zero
+        {"-0.0", MakeDouble(1, 0, 0)},       // NegativeZero
+        {"1.0", MakeDouble(0, 1023, 0)},     // One
+        {"-1.0", MakeDouble(1, 1023, 0)},    // NegativeOne
     };
 }
 
@@ -220,75 +254,76 @@
                          ParserImplFloatLiteralTest,
                          testing::ValuesIn(DecimalFloatCases()));
 
-const float NegInf = MakeFloat(1, 255, 0);
-const float PosInf = MakeFloat(0, 255, 0);
+const double NegInf = MakeDouble(1, 0x7FF, 0);
+const double PosInf = MakeDouble(0, 0x7FF, 0);
 FloatLiteralTestCaseList HexFloatCases() {
     return FloatLiteralTestCaseList{
         // Regular numbers
-        {"0x0p+0", 0.f},
-        {"0x1p+0", 1.f},
-        {"0x1p+1", 2.f},
-        {"0x1.8p+1", 3.f},
-        {"0x1.99999ap-4", 0.1f},
-        {"0x1p-1", 0.5f},
-        {"0x1p-2", 0.25f},
-        {"0x1.8p-1", 0.75f},
-        {"-0x0p+0", -0.f},
-        {"-0x1p+0", -1.f},
-        {"-0x1p-1", -0.5f},
-        {"-0x1p-2", -0.25f},
-        {"-0x1.8p-1", -0.75f},
+        {"0x0p+0", 0.0},
+        {"0x1p+0", 1.0},
+        {"0x1p+1", 2.0},
+        {"0x1.8p+1", 3.0},
+        {"0x1.99999ap-4", 0.10000000149011612},
+        {"0x1p-1", 0.5},
+        {"0x1p-2", 0.25},
+        {"0x1.8p-1", 0.75},
+        {"-0x0p+0", -0.0},
+        {"-0x1p+0", -1.0},
+        {"-0x1p-1", -0.5},
+        {"-0x1p-2", -0.25},
+        {"-0x1.8p-1", -0.75},
 
         // Large numbers
-        {"0x1p+9", 512.f},
-        {"0x1p+10", 1024.f},
-        {"0x1.02p+10", 1024.f + 8.f},
-        {"-0x1p+9", -512.f},
-        {"-0x1p+10", -1024.f},
-        {"-0x1.02p+10", -1024.f - 8.f},
+        {"0x1p+9", 512.0},
+        {"0x1p+10", 1024.0},
+        {"0x1.02p+10", 1024.0 + 8.0},
+        {"-0x1p+9", -512.0},
+        {"-0x1p+10", -1024.0},
+        {"-0x1.02p+10", -1024.0 - 8.0},
 
         // Small numbers
-        {"0x1p-9", 1.0f / 512.f},
-        {"0x1p-10", 1.0f / 1024.f},
-        {"0x1.02p-3", 1.0f / 1024.f + 1.0f / 8.f},
-        {"-0x1p-9", 1.0f / -512.f},
-        {"-0x1p-10", 1.0f / -1024.f},
-        {"-0x1.02p-3", 1.0f / -1024.f - 1.0f / 8.f},
+        {"0x1p-9", 1.0 / 512.0},
+        {"0x1p-10", 1.0 / 1024.0},
+        {"0x1.02p-3", 1.0 / 1024.0 + 1.0 / 8.0},
+        {"-0x1p-9", 1.0 / -512.0},
+        {"-0x1p-10", 1.0 / -1024.0},
+        {"-0x1.02p-3", 1.0 / -1024.0 - 1.0 / 8.0},
 
         // Near lowest non-denorm
-        {"0x1p-124", std::ldexp(1.f * 8.f, -127)},
-        {"0x1p-125", std::ldexp(1.f * 4.f, -127)},
-        {"-0x1p-124", -std::ldexp(1.f * 8.f, -127)},
-        {"-0x1p-125", -std::ldexp(1.f * 4.f, -127)},
+        {"0x1p-124", std::ldexp(1.0 * 8.0, -127)},
+        {"0x1p-125", std::ldexp(1.0 * 4.0, -127)},
+        {"-0x1p-124", -std::ldexp(1.0 * 8.0, -127)},
+        {"-0x1p-125", -std::ldexp(1.0 * 4.0, -127)},
 
         // Lowest non-denorm
-        {"0x1p-126", std::ldexp(1.f * 2.f, -127)},
-        {"-0x1p-126", -std::ldexp(1.f * 2.f, -127)},
+        {"0x1p-126", std::ldexp(1.0 * 2.0, -127)},
+        {"-0x1p-126", -std::ldexp(1.0 * 2.0, -127)},
 
         // Denormalized values
-        {"0x1p-127", std::ldexp(1.f, -127)},
-        {"0x1p-128", std::ldexp(1.f / 2.f, -127)},
-        {"0x1p-129", std::ldexp(1.f / 4.f, -127)},
-        {"0x1p-130", std::ldexp(1.f / 8.f, -127)},
-        {"-0x1p-127", -std::ldexp(1.f, -127)},
-        {"-0x1p-128", -std::ldexp(1.f / 2.f, -127)},
-        {"-0x1p-129", -std::ldexp(1.f / 4.f, -127)},
-        {"-0x1p-130", -std::ldexp(1.f / 8.f, -127)},
+        {"0x1p-127", std::ldexp(1.0, -127)},
+        {"0x1p-128", std::ldexp(1.0 / 2.0, -127)},
+        {"0x1p-129", std::ldexp(1.0 / 4.0, -127)},
+        {"0x1p-130", std::ldexp(1.0 / 8.0, -127)},
+        {"-0x1p-127", -std::ldexp(1.0, -127)},
+        {"-0x1p-128", -std::ldexp(1.0 / 2.0, -127)},
+        {"-0x1p-129", -std::ldexp(1.0 / 4.0, -127)},
+        {"-0x1p-130", -std::ldexp(1.0 / 8.0, -127)},
 
-        {"0x1.8p-127", std::ldexp(1.f, -127) + (std::ldexp(1.f, -127) / 2.f)},
-        {"0x1.8p-128", std::ldexp(1.f, -127) / 2.f + (std::ldexp(1.f, -127) / 4.f)},
+        {"0x1.8p-127", std::ldexp(1.0, -127) + (std::ldexp(1.0, -127) / 2.0)},
+        {"0x1.8p-128", std::ldexp(1.0, -127) / 2.0 + (std::ldexp(1.0, -127) / 4.0)},
 
-        {"0x1p-149", MakeFloat(0, 0, 1)},                 // +SmallestDenormal
-        {"0x1p-148", MakeFloat(0, 0, 2)},                 // +BiggerDenormal
-        {"0x1.fffffcp-127", MakeFloat(0, 0, 0x7fffff)},   // +LargestDenormal
-        {"-0x1p-149", MakeFloat(1, 0, 1)},                // -SmallestDenormal
-        {"-0x1p-148", MakeFloat(1, 0, 2)},                // -BiggerDenormal
-        {"-0x1.fffffcp-127", MakeFloat(1, 0, 0x7fffff)},  // -LargestDenormal
+        // F32 extremities
+        {"0x1p-149", static_cast<double>(MakeFloat(0, 0, 1))},                 // +SmallestDenormal
+        {"0x1p-148", static_cast<double>(MakeFloat(0, 0, 2))},                 // +BiggerDenormal
+        {"0x1.fffffcp-127", static_cast<double>(MakeFloat(0, 0, 0x7fffff))},   // +LargestDenormal
+        {"-0x1p-149", static_cast<double>(MakeFloat(1, 0, 1))},                // -SmallestDenormal
+        {"-0x1p-148", static_cast<double>(MakeFloat(1, 0, 2))},                // -BiggerDenormal
+        {"-0x1.fffffcp-127", static_cast<double>(MakeFloat(1, 0, 0x7fffff))},  // -LargestDenormal
 
-        {"0x1.2bfaf8p-127", MakeFloat(0, 0, 0xcafebe)},   // +Subnormal
-        {"-0x1.2bfaf8p-127", MakeFloat(1, 0, 0xcafebe)},  // -Subnormal
-        {"0x1.55554p-130", MakeFloat(0, 0, 0xaaaaa)},     // +Subnormal
-        {"-0x1.55554p-130", MakeFloat(1, 0, 0xaaaaa)},    // -Subnormal
+        {"0x1.2bfaf8p-127", static_cast<double>(MakeFloat(0, 0, 0xcafebe))},   // +Subnormal
+        {"-0x1.2bfaf8p-127", static_cast<double>(MakeFloat(1, 0, 0xcafebe))},  // -Subnormal
+        {"0x1.55554p-130", static_cast<double>(MakeFloat(0, 0, 0xaaaaa))},     // +Subnormal
+        {"-0x1.55554p-130", static_cast<double>(MakeFloat(1, 0, 0xaaaaa))},    // -Subnormal
 
         // Nan -> Infinity
         {"0x1.8p+128", PosInf},
@@ -318,76 +353,76 @@
         {"0x1.0p2147483520", PosInf},  // INT_MAX - 127 (largest valid exponent)
 
         // Underflow -> Zero
-        {"0x1p-500", 0.f},  // Exponent underflows
-        {"-0x1p-500", -0.f},
-        {"0x0.00000000001p-126", 0.f},  // Fraction causes underflow
-        {"-0x0.0000000001p-127", -0.f},
-        {"0x0.01p-142", 0.f},
-        {"-0x0.01p-142", -0.f},    // Fraction causes additional underflow
+        {"0x1p-500", 0.0},  // Exponent underflows
+        {"-0x1p-500", -0.0},
+        {"0x0.00000000001p-126", 0.0},  // Fraction causes underflow
+        {"-0x0.0000000001p-127", -0.0},
+        {"0x0.01p-142", 0.0},
+        {"-0x0.01p-142", -0.0},    // Fraction causes additional underflow
         {"0x1.0p-2147483520", 0},  // -(INT_MAX - 127) (smallest valid exponent)
 
         // Zero with non-zero exponent -> Zero
-        {"0x0p+0", 0.f},
-        {"0x0p+1", 0.f},
-        {"0x0p-1", 0.f},
-        {"0x0p+9999999999", 0.f},
-        {"0x0p-9999999999", 0.f},
+        {"0x0p+0", 0.0},
+        {"0x0p+1", 0.0},
+        {"0x0p-1", 0.0},
+        {"0x0p+9999999999", 0.0},
+        {"0x0p-9999999999", 0.0},
         // Same, but with very large positive exponents that would cause overflow
         // if the mantissa were non-zero.
-        {"0x0p+4000000000", 0.f},    // 4 billion:
-        {"0x0p+40000000000", 0.f},   // 40 billion
-        {"-0x0p+40000000000", 0.f},  // As above 2, but negative mantissa
-        {"-0x0p+400000000000", 0.f},
-        {"0x0.00p+4000000000", 0.f},  // As above 4, but with fractional part
-        {"0x0.00p+40000000000", 0.f},
-        {"-0x0.00p+40000000000", 0.f},
-        {"-0x0.00p+400000000000", 0.f},
-        {"0x0p-4000000000", 0.f},  // As above 8, but with negative exponents
-        {"0x0p-40000000000", 0.f},
-        {"-0x0p-40000000000", 0.f},
-        {"-0x0p-400000000000", 0.f},
-        {"0x0.00p-4000000000", 0.f},
-        {"0x0.00p-40000000000", 0.f},
-        {"-0x0.00p-40000000000", 0.f},
-        {"-0x0.00p-400000000000", 0.f},
+        {"0x0p+4000000000", 0.0},    // 4 billion:
+        {"0x0p+40000000000", 0.0},   // 40 billion
+        {"-0x0p+40000000000", 0.0},  // As above 2, but negative mantissa
+        {"-0x0p+400000000000", 0.0},
+        {"0x0.00p+4000000000", 0.0},  // As above 4, but with fractional part
+        {"0x0.00p+40000000000", 0.0},
+        {"-0x0.00p+40000000000", 0.0},
+        {"-0x0.00p+400000000000", 0.0},
+        {"0x0p-4000000000", 0.0},  // As above 8, but with negative exponents
+        {"0x0p-40000000000", 0.0},
+        {"-0x0p-40000000000", 0.0},
+        {"-0x0p-400000000000", 0.0},
+        {"0x0.00p-4000000000", 0.0},
+        {"0x0.00p-40000000000", 0.0},
+        {"-0x0.00p-40000000000", 0.0},
+        {"-0x0.00p-400000000000", 0.0},
 
         // Test parsing
-        {"0x0p0", 0.f},
-        {"0x0p-0", 0.f},
-        {"0x0p+000", 0.f},
-        {"0x00000000000000p+000000000000000", 0.f},
-        {"0x00000000000000p-000000000000000", 0.f},
-        {"0x00000000000001p+000000000000000", 1.f},
-        {"0x00000000000001p-000000000000000", 1.f},
-        {"0x0000000000000000000001.99999ap-000000000000000004", 0.1f},
-        {"0x2p+0", 2.f},
-        {"0xFFp+0", 255.f},
-        {"0x0.8p+0", 0.5f},
-        {"0x0.4p+0", 0.25f},
-        {"0x0.4p+1", 2 * 0.25f},
-        {"0x0.4p+2", 4 * 0.25f},
-        {"0x123Ep+1", 9340.f},
-        {"-0x123Ep+1", -9340.f},
-        {"0x1a2b3cP12", 7.024656e+09f},
-        {"-0x1a2b3cP12", -7.024656e+09f},
+        {"0x0p0", 0.0},
+        {"0x0p-0", 0.0},
+        {"0x0p+000", 0.0},
+        {"0x00000000000000p+000000000000000", 0.0},
+        {"0x00000000000000p-000000000000000", 0.0},
+        {"0x00000000000001p+000000000000000", 1.0},
+        {"0x00000000000001p-000000000000000", 1.0},
+        {"0x0000000000000000000001.99999ap-000000000000000004", 0.10000000149011612},
+        {"0x2p+0", 2.0},
+        {"0xFFp+0", 255.0},
+        {"0x0.8p+0", 0.5},
+        {"0x0.4p+0", 0.25},
+        {"0x0.4p+1", 2 * 0.25},
+        {"0x0.4p+2", 4 * 0.25},
+        {"0x123Ep+1", 9340.0},
+        {"-0x123Ep+1", -9340.0},
+        {"0x1a2b3cP12", 7.024656384e+09},
+        {"-0x1a2b3cP12", -7.024656384e+09},
 
         // Examples without a binary exponent part.
-        {"0x1.", 1.0f},
-        {"0x.8", 0.5f},
-        {"0x1.8", 1.5f},
-        {"-0x1.", -1.0f},
-        {"-0x.8", -0.5f},
-        {"-0x1.8", -1.5f},
+        {"0x1.", 1.0},
+        {"0x.8", 0.5},
+        {"0x1.8", 1.5},
+        {"-0x1.", -1.0},
+        {"-0x.8", -0.5},
+        {"-0x1.8", -1.5},
 
         // Examples with a binary exponent and a 'f' suffix.
-        {"0x1.p0f", 1.0f},
-        {"0x.8p2f", 2.0f},
-        {"0x1.8p-1f", 0.75f},
-        {"0x2p-2f", 0.5f},  // No binary point
-        {"-0x1.p0f", -1.0f},
-        {"-0x.8p2f", -2.0f},
-        {"-0x1.8p-1f", -0.75f},
-        {"-0x2p-2f", -0.5f},  // No binary point
+        {"0x1.p0f", 1.0},
+        {"0x.8p2f", 2.0},
+        {"0x1.8p-1f", 0.75},
+        {"0x2p-2f", 0.5},  // No binary point
+        {"-0x1.p0f", -1.0},
+        {"-0x.8p2f", -2.0},
+        {"-0x1.8p-1f", -0.75},
+        {"-0x2p-2f", -0.5},  // No binary point
     };
 }
 INSTANTIATE_TEST_SUITE_P(ParserImplFloatLiteralTest_HexFloat,
@@ -501,7 +536,10 @@
     EXPECT_FALSE(p->has_error()) << p->error();
     ASSERT_NE(c.value, nullptr);
     ASSERT_TRUE(c->Is<ast::FloatLiteralExpression>());
-    EXPECT_FLOAT_EQ(c->As<ast::FloatLiteralExpression>()->value, std::numeric_limits<float>::max());
+    EXPECT_DOUBLE_EQ(c->As<ast::FloatLiteralExpression>()->value,
+                     std::numeric_limits<float>::max());
+    EXPECT_EQ(c->As<ast::FloatLiteralExpression>()->suffix,
+              ast::FloatLiteralExpression::Suffix::kNone);
     EXPECT_EQ(c->source.range, (Source::Range{{1u, 1u}, {1u, 42u}}));
 }
 
@@ -522,8 +560,10 @@
     EXPECT_FALSE(p->has_error()) << p->error();
     ASSERT_NE(c.value, nullptr);
     ASSERT_TRUE(c->Is<ast::FloatLiteralExpression>());
-    EXPECT_FLOAT_EQ(c->As<ast::FloatLiteralExpression>()->value,
-                    std::numeric_limits<float>::lowest());
+    EXPECT_DOUBLE_EQ(c->As<ast::FloatLiteralExpression>()->value,
+                     std::numeric_limits<float>::lowest());
+    EXPECT_EQ(c->As<ast::FloatLiteralExpression>()->suffix,
+              ast::FloatLiteralExpression::Suffix::kNone);
     EXPECT_EQ(c->source.range, (Source::Range{{1u, 1u}, {1u, 43u}}));
 }
 
diff --git a/src/tint/reader/wgsl/token.cc b/src/tint/reader/wgsl/token.cc
index 2f51a85..06eb6fb 100644
--- a/src/tint/reader/wgsl/token.cc
+++ b/src/tint/reader/wgsl/token.cc
@@ -26,12 +26,14 @@
         case Token::Type::kIdentifier:
             return "identifier";
         case Token::Type::kFloatLiteral:
-            return "float literal";
+            return "abstract float literal";
+        case Token::Type::kFloatLiteral_F:
+            return "'f'-suffixed float literal";
         case Token::Type::kIntLiteral:
             return "abstract integer literal";
-        case Token::Type::kIntILiteral:
+        case Token::Type::kIntLiteral_I:
             return "'i'-suffixed integer literal";
-        case Token::Type::kIntULiteral:
+        case Token::Type::kIntLiteral_U:
             return "'u'-suffixed integer literal";
         case Token::Type::kUninitialized:
             return "uninitialized";
@@ -278,8 +280,8 @@
 Token::Token(Type type, const Source& source, int64_t val)
     : type_(type), source_(source), value_(val) {}
 
-Token::Token(const Source& source, float val)
-    : type_(Type::kFloatLiteral), source_(source), value_(val) {}
+Token::Token(Type type, const Source& source, double val)
+    : type_(type), source_(source), value_(val) {}
 
 Token::Token(Type type, const Source& source) : type_(type), source_(source) {}
 
@@ -304,12 +306,14 @@
 std::string Token::to_str() const {
     switch (type_) {
         case Type::kFloatLiteral:
-            return std::to_string(std::get<float>(value_));
+            return std::to_string(std::get<double>(value_));
+        case Type::kFloatLiteral_F:
+            return std::to_string(std::get<double>(value_)) + "f";
         case Type::kIntLiteral:
             return std::to_string(std::get<int64_t>(value_));
-        case Type::kIntILiteral:
+        case Type::kIntLiteral_I:
             return std::to_string(std::get<int64_t>(value_)) + "i";
-        case Type::kIntULiteral:
+        case Type::kIntLiteral_U:
             return std::to_string(std::get<int64_t>(value_)) + "u";
         case Type::kIdentifier:
         case Type::kError:
@@ -322,8 +326,8 @@
     }
 }
 
-float Token::to_f32() const {
-    return std::get<float>(value_);
+double Token::to_f64() const {
+    return std::get<double>(value_);
 }
 
 int64_t Token::to_i64() const {
diff --git a/src/tint/reader/wgsl/token.h b/src/tint/reader/wgsl/token.h
index 106d1a6..82b3fab 100644
--- a/src/tint/reader/wgsl/token.h
+++ b/src/tint/reader/wgsl/token.h
@@ -38,14 +38,16 @@
 
         /// An identifier
         kIdentifier,
-        /// A float value
+        /// A float literal with no suffix
         kFloatLiteral,
+        /// A float literal with an 'f' suffix
+        kFloatLiteral_F,
         /// An integer literal with no suffix
         kIntLiteral,
         /// An integer literal with an 'i' suffix
-        kIntILiteral,
+        kIntLiteral_I,
         /// An integer literal with a 'u' suffix
-        kIntULiteral,
+        kIntLiteral_U,
 
         /// A '&'
         kAnd,
@@ -304,10 +306,11 @@
     /// @param source the source of the token
     /// @param val the source unsigned for the token
     Token(Type type, const Source& source, int64_t val);
-    /// Create a float Token
+    /// Create a double Token
+    /// @param type the Token::Type of the token
     /// @param source the source of the token
-    /// @param val the source float for the token
-    Token(const Source& source, float val);
+    /// @param val the source double for the token
+    Token(Type type, const Source& source, double val);
     /// Move constructor
     Token(Token&&);
     /// Copy constructor
@@ -339,9 +342,9 @@
     bool IsIdentifier() const { return type_ == Type::kIdentifier; }
     /// @returns true if the token is a literal
     bool IsLiteral() const {
-        return type_ == Type::kIntLiteral || type_ == Type::kIntILiteral ||
-               type_ == Type::kIntULiteral || type_ == Type::kFalse || type_ == Type::kTrue ||
-               type_ == Type::kFloatLiteral;
+        return type_ == Type::kIntLiteral || type_ == Type::kIntLiteral_I ||
+               type_ == Type::kIntLiteral_U || type_ == Type::kFalse || type_ == Type::kTrue ||
+               type_ == Type::kFloatLiteral || type_ == Type::kFloatLiteral_F;
     }
     /// @returns true if token is a 'matNxM'
     bool IsMatrix() const {
@@ -379,8 +382,8 @@
     std::string to_str() const;
     /// Returns the float value of the token. 0 is returned if the token does not
     /// contain a float value.
-    /// @return float
-    float to_f32() const;
+    /// @return double
+    double to_f64() const;
     /// Returns the int64_t value of the token. 0 is returned if the token does
     /// not contain an integer value.
     /// @return int64_t
@@ -395,7 +398,7 @@
     /// The source where the token appeared
     Source source_;
     /// The value represented by the token
-    std::variant<int64_t, float, std::string, std::string_view> value_;
+    std::variant<int64_t, double, std::string, std::string_view> value_;
 };
 
 #ifndef NDEBUG
diff --git a/src/tint/reader/wgsl/token_test.cc b/src/tint/reader/wgsl/token_test.cc
index dd46616..93fe834 100644
--- a/src/tint/reader/wgsl/token_test.cc
+++ b/src/tint/reader/wgsl/token_test.cc
@@ -16,46 +16,53 @@
 
 #include <limits>
 
-#include "gtest/gtest.h"
+#include "gmock/gmock.h"
 
 namespace tint::reader::wgsl {
 namespace {
 
+using ::testing::EndsWith;
+using ::testing::Not;
+using ::testing::StartsWith;
+
 using TokenTest = testing::Test;
 
-TEST_F(TokenTest, ReturnsF32) {
-    Token t1(Source{}, -2.345f);
-    EXPECT_EQ(t1.to_f32(), -2.345f);
+TEST_F(TokenTest, ReturnsF64) {
+    Token t1(Token::Type::kFloatLiteral_F, Source{}, -2.345);
+    EXPECT_EQ(t1.to_f64(), -2.345);
 
-    Token t2(Source{}, 2.345f);
-    EXPECT_EQ(t2.to_f32(), 2.345f);
+    Token t2(Token::Type::kFloatLiteral_F, Source{}, 2.345);
+    EXPECT_EQ(t2.to_f64(), 2.345);
 }
 
 TEST_F(TokenTest, ReturnsI32) {
-    Token t1(Token::Type::kIntILiteral, Source{}, -2345);
+    Token t1(Token::Type::kIntLiteral_I, Source{}, static_cast<int64_t>(-2345));
     EXPECT_EQ(t1.to_i64(), -2345);
 
-    Token t2(Token::Type::kIntILiteral, Source{}, 2345);
+    Token t2(Token::Type::kIntLiteral_I, Source{}, static_cast<int64_t>(2345));
     EXPECT_EQ(t2.to_i64(), 2345);
 }
 
 TEST_F(TokenTest, HandlesMaxI32) {
-    Token t1(Token::Type::kIntILiteral, Source{}, std::numeric_limits<int32_t>::max());
+    Token t1(Token::Type::kIntLiteral_I, Source{},
+             static_cast<int64_t>(std::numeric_limits<int32_t>::max()));
     EXPECT_EQ(t1.to_i64(), std::numeric_limits<int32_t>::max());
 }
 
 TEST_F(TokenTest, HandlesMinI32) {
-    Token t1(Token::Type::kIntILiteral, Source{}, std::numeric_limits<int32_t>::min());
+    Token t1(Token::Type::kIntLiteral_I, Source{},
+             static_cast<int64_t>(std::numeric_limits<int32_t>::min()));
     EXPECT_EQ(t1.to_i64(), std::numeric_limits<int32_t>::min());
 }
 
 TEST_F(TokenTest, ReturnsU32) {
-    Token t2(Token::Type::kIntULiteral, Source{}, 2345u);
+    Token t2(Token::Type::kIntLiteral_U, Source{}, static_cast<int64_t>(2345u));
     EXPECT_EQ(t2.to_i64(), 2345u);
 }
 
 TEST_F(TokenTest, ReturnsMaxU32) {
-    Token t1(Token::Type::kIntULiteral, Source{}, std::numeric_limits<uint32_t>::max());
+    Token t1(Token::Type::kIntLiteral_U, Source{},
+             static_cast<int64_t>(std::numeric_limits<uint32_t>::max()));
     EXPECT_EQ(t1.to_i64(), std::numeric_limits<uint32_t>::max());
 }
 
@@ -71,5 +78,19 @@
     EXPECT_EQ(t.source().range.end.column, 3u);
 }
 
+TEST_F(TokenTest, ToStr) {
+    double d = 123.0;
+    int64_t i = 123;
+    EXPECT_THAT(Token(Token::Type::kFloatLiteral, Source{}, d).to_str(), StartsWith("123"));
+    EXPECT_THAT(Token(Token::Type::kFloatLiteral, Source{}, d).to_str(), Not(EndsWith("f")));
+    EXPECT_THAT(Token(Token::Type::kFloatLiteral_F, Source{}, d).to_str(), StartsWith("123"));
+    EXPECT_THAT(Token(Token::Type::kFloatLiteral_F, Source{}, d).to_str(), EndsWith("f"));
+    EXPECT_EQ(Token(Token::Type::kIntLiteral, Source{}, i).to_str(), "123");
+    EXPECT_EQ(Token(Token::Type::kIntLiteral_I, Source{}, i).to_str(), "123i");
+    EXPECT_EQ(Token(Token::Type::kIntLiteral_U, Source{}, i).to_str(), "123u");
+    EXPECT_EQ(Token(Token::Type::kIdentifier, Source{}, "blah").to_str(), "blah");
+    EXPECT_EQ(Token(Token::Type::kError, Source{}, "blah").to_str(), "blah");
+}
+
 }  // namespace
 }  // namespace tint::reader::wgsl
diff --git a/src/tint/resolver/array_accessor_test.cc b/src/tint/resolver/array_accessor_test.cc
index 1704699..9323b23 100644
--- a/src/tint/resolver/array_accessor_test.cc
+++ b/src/tint/resolver/array_accessor_test.cc
@@ -27,7 +27,7 @@
 
 TEST_F(ResolverIndexAccessorTest, Matrix_Dynamic_F32) {
     Global("my_var", ty.mat2x3<f32>(), ast::StorageClass::kPrivate);
-    auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 1.0f));
+    auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 1_f));
     WrapInFunction(acc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -116,7 +116,7 @@
 
 TEST_F(ResolverIndexAccessorTest, Vector_F32) {
     Global("my_var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
-    auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 2.0f));
+    auto* acc = IndexAccessor("my_var", Expr(Source{{12, 34}}, 2_f));
     WrapInFunction(acc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -224,7 +224,7 @@
     // let a : array<f32, 3>;
     // var f : f32 = a[2.0f];
     auto* a = Let("a", ty.array<f32, 3>(), array<f32, 3>());
-    auto* f = Var("a_2", ty.f32(), IndexAccessor("a", Expr(Source{{12, 34}}, 2.0f)));
+    auto* f = Var("a_2", ty.f32(), IndexAccessor("a", Expr(Source{{12, 34}}, 2_f)));
     Func("my_func", ast::VariableList{}, ty.void_(),
          {
              Decl(a),
diff --git a/src/tint/resolver/assignment_validation_test.cc b/src/tint/resolver/assignment_validation_test.cc
index f12f804..e9fb7bf 100644
--- a/src/tint/resolver/assignment_validation_test.cc
+++ b/src/tint/resolver/assignment_validation_test.cc
@@ -52,7 +52,7 @@
 
     auto* var = Var("a", ty.i32(), ast::StorageClass::kNone, Expr(2_i));
 
-    auto* assign = Assign(Source{{12, 34}}, "a", 2.3f);
+    auto* assign = Assign(Source{{12, 34}}, "a", 2.3_f);
     WrapInFunction(var, assign);
 
     ASSERT_FALSE(r()->Resolve());
@@ -118,7 +118,7 @@
     // }
 
     auto* var = Var("a", ty.i32(), ast::StorageClass::kNone, Expr(2_i));
-    WrapInFunction(var, Assign(Source{{12, 34}}, "a", 2.3f));
+    WrapInFunction(var, Assign(Source{{12, 34}}, "a", 2.3_f));
 
     ASSERT_FALSE(r()->Resolve());
 
@@ -134,7 +134,7 @@
     // }
 
     auto* var = Var("a", ty.i32(), ast::StorageClass::kNone, Expr(2_i));
-    auto* inner_block = Block(Decl(var), Assign(Source{{12, 34}}, "a", 2.3f));
+    auto* inner_block = Block(Decl(var), Assign(Source{{12, 34}}, "a", 2.3_f));
     auto* outer_block = Block(inner_block);
     WrapInFunction(outer_block);
 
@@ -353,7 +353,7 @@
 
     WrapInFunction(Assign(Phony(), 1_i),                                    //
                    Assign(Phony(), 2_u),                                    //
-                   Assign(Phony(), 3.f),                                    //
+                   Assign(Phony(), 3_f),                                    //
                    Assign(Phony(), vec2<bool>()),                           //
                    Assign(Phony(), "tex"),                                  //
                    Assign(Phony(), "smp"),                                  //
diff --git a/src/tint/resolver/attribute_validation_test.cc b/src/tint/resolver/attribute_validation_test.cc
index dbefb14..3280ebf 100644
--- a/src/tint/resolver/attribute_validation_test.cc
+++ b/src/tint/resolver/attribute_validation_test.cc
@@ -161,7 +161,7 @@
 TEST_P(FunctionReturnTypeAttributeTest, IsValid) {
     auto& params = GetParam();
 
-    Func("main", ast::VariableList{}, ty.f32(), ast::StatementList{Return(1.f)}, {},
+    Func("main", ast::VariableList{}, ty.f32(), ast::StatementList{Return(1_f)}, {},
          createAttributes({}, *this, params.kind));
 
     if (params.should_pass) {
@@ -316,7 +316,7 @@
 using ComputeShaderReturnTypeAttributeTest = TestWithParams;
 TEST_P(ComputeShaderReturnTypeAttributeTest, IsValid) {
     auto& params = GetParam();
-    Func("main", ast::VariableList{}, ty.vec4<f32>(), {Return(Construct(ty.vec4<f32>(), 1.f))},
+    Func("main", ast::VariableList{}, ty.vec4<f32>(), {Return(Construct(ty.vec4<f32>(), 1_f))},
          {Stage(ast::PipelineStage::kCompute), WorkgroupSize(1_i)},
          createAttributes(Source{{12, 34}}, *this, params.kind));
 
@@ -450,7 +450,7 @@
 
 using EntryPointParameterAttributeTest = TestWithParams;
 TEST_F(EntryPointParameterAttributeTest, DuplicateAttribute) {
-    Func("main", ast::VariableList{}, ty.f32(), ast::StatementList{Return(1.f)},
+    Func("main", ast::VariableList{}, ty.f32(), ast::StatementList{Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)},
          {
              Location(Source{{12, 34}}, 2),
@@ -478,7 +478,7 @@
 
 using EntryPointReturnTypeAttributeTest = ResolverTest;
 TEST_F(EntryPointReturnTypeAttributeTest, DuplicateAttribute) {
-    Func("main", ast::VariableList{}, ty.f32(), ast::StatementList{Return(1.f)},
+    Func("main", ast::VariableList{}, ty.f32(), ast::StatementList{Return(1_f)},
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)},
          ast::AttributeList{
              Location(Source{{12, 34}}, 2),
@@ -721,7 +721,8 @@
 TEST_P(ConstantAttributeTest, IsValid) {
     auto& params = GetParam();
 
-    GlobalConst("a", ty.f32(), Expr(1.23f), createAttributes(Source{{12, 34}}, *this, params.kind));
+    GlobalConst("a", ty.f32(), Expr(1.23_f),
+                createAttributes(Source{{12, 34}}, *this, params.kind));
 
     WrapInFunction();
 
@@ -750,7 +751,7 @@
                                          TestParams{AttributeKind::kBindingAndGroup, false}));
 
 TEST_F(ConstantAttributeTest, DuplicateAttribute) {
-    GlobalConst("a", ty.f32(), Expr(1.23f),
+    GlobalConst("a", ty.f32(), Expr(1.23_f),
                 ast::AttributeList{
                     create<ast::IdAttribute>(Source{{12, 34}}, 0),
                     create<ast::IdAttribute>(Source{{56, 78}}, 1),
diff --git a/src/tint/resolver/builtin_test.cc b/src/tint/resolver/builtin_test.cc
index 94684ba..6020eae 100644
--- a/src/tint/resolver/builtin_test.cc
+++ b/src/tint/resolver/builtin_test.cc
@@ -287,7 +287,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Dot_Error_Scalar) {
-    auto* expr = Call("dot", 1.0f, 1.0f);
+    auto* expr = Call("dot", 1_f, 1_f);
     WrapInFunction(expr);
 
     EXPECT_FALSE(r()->Resolve());
@@ -349,8 +349,8 @@
 }
 
 TEST_F(ResolverBuiltinTest, Select_Error_Matrix) {
-    auto* expr = Call("select", mat2x2<f32>(vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f)),
-                      mat2x2<f32>(vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f)), Expr(true));
+    auto* expr = Call("select", mat2x2<f32>(vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f)),
+                      mat2x2<f32>(vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f)), Expr(true));
     WrapInFunction(expr);
 
     EXPECT_FALSE(r()->Resolve());
@@ -366,7 +366,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Select_Error_MismatchTypes) {
-    auto* expr = Call("select", 1.0f, vec2<f32>(2.0f, 3.0f), Expr(true));
+    auto* expr = Call("select", 1_f, vec2<f32>(2_f, 3_f), Expr(true));
     WrapInFunction(expr);
 
     EXPECT_FALSE(r()->Resolve());
@@ -382,7 +382,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Select_Error_MismatchVectorSize) {
-    auto* expr = Call("select", vec2<f32>(1.0f, 2.0f), vec3<f32>(3.0f, 4.0f, 5.0f), Expr(true));
+    auto* expr = Call("select", vec2<f32>(1_f, 2_f), vec3<f32>(3_f, 4_f, 5_f), Expr(true));
     WrapInFunction(expr);
 
     EXPECT_FALSE(r()->Resolve());
@@ -422,7 +422,7 @@
 TEST_P(ResolverBuiltinTest_Barrier, Error_TooManyParams) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec4<f32>(1.f, 2.f, 3.f, 4.f), 1.0f);
+    auto* call = Call(param.name, vec4<f32>(1_f, 2_f, 3_f, 4_f), 1_f);
     WrapInFunction(CallStmt(call));
 
     EXPECT_FALSE(r()->Resolve());
@@ -443,8 +443,8 @@
     bool pack4 =
         param.builtin == BuiltinType::kPack4x8snorm || param.builtin == BuiltinType::kPack4x8unorm;
 
-    auto* call = pack4 ? Call(param.name, vec4<f32>(1.f, 2.f, 3.f, 4.f))
-                       : Call(param.name, vec2<f32>(1.f, 2.f));
+    auto* call = pack4 ? Call(param.name, vec4<f32>(1_f, 2_f, 3_f, 4_f))
+                       : Call(param.name, vec2<f32>(1_f, 2_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -484,8 +484,8 @@
     bool pack4 =
         param.builtin == BuiltinType::kPack4x8snorm || param.builtin == BuiltinType::kPack4x8unorm;
 
-    auto* call = pack4 ? Call(param.name, vec4<f32>(1.f, 2.f, 3.f, 4.f), 1.0f)
-                       : Call(param.name, vec2<f32>(1.f, 2.f), 1.0f);
+    auto* call = pack4 ? Call(param.name, vec4<f32>(1_f, 2_f, 3_f, 4_f), 1_f)
+                       : Call(param.name, vec2<f32>(1_f, 2_f), 1_f);
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -535,7 +535,7 @@
 TEST_P(ResolverBuiltinTest_SingleParam, Scalar) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, 1.f);
+    auto* call = Call(param.name, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -547,7 +547,7 @@
 TEST_P(ResolverBuiltinTest_SingleParam, Vector) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call(param.name, vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -647,7 +647,7 @@
 }
 
 TEST_F(ResolverBuiltinDataTest, Normalize_Vector) {
-    auto* call = Call("normalize", vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call("normalize", vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -671,7 +671,7 @@
 }
 
 TEST_F(ResolverBuiltinDataTest, FrexpScalar) {
-    auto* call = Call("frexp", 1.0f);
+    auto* call = Call("frexp", 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -750,7 +750,7 @@
 
 TEST_F(ResolverBuiltinDataTest, Frexp_Error_SecondParamFloatPtr) {
     Global("v", ty.f32(), ast::StorageClass::kWorkgroup);
-    auto* call = Call("frexp", 1.0f, AddressOf("v"));
+    auto* call = Call("frexp", 1_f, AddressOf("v"));
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -765,7 +765,7 @@
 }
 
 TEST_F(ResolverBuiltinDataTest, Frexp_Error_SecondParamNotAPointer) {
-    auto* call = Call("frexp", 1.0f, 1_i);
+    auto* call = Call("frexp", 1_f, 1_i);
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -780,7 +780,7 @@
 
 TEST_F(ResolverBuiltinDataTest, Frexp_Error_VectorSizesDontMatch) {
     Global("v", ty.vec4<i32>(), ast::StorageClass::kWorkgroup);
-    auto* call = Call("frexp", vec2<f32>(1.0f, 2.0f), AddressOf("v"));
+    auto* call = Call("frexp", vec2<f32>(1_f, 2_f), AddressOf("v"));
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -795,7 +795,7 @@
 }
 
 TEST_F(ResolverBuiltinDataTest, ModfScalar) {
-    auto* call = Call("modf", 1.0f);
+    auto* call = Call("modf", 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -874,7 +874,7 @@
 
 TEST_F(ResolverBuiltinDataTest, Modf_Error_SecondParamIntPtr) {
     Global("whole", ty.i32(), ast::StorageClass::kWorkgroup);
-    auto* call = Call("modf", 1.0f, AddressOf("whole"));
+    auto* call = Call("modf", 1_f, AddressOf("whole"));
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -889,7 +889,7 @@
 }
 
 TEST_F(ResolverBuiltinDataTest, Modf_Error_SecondParamNotAPointer) {
-    auto* call = Call("modf", 1.0f, 1.0f);
+    auto* call = Call("modf", 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -904,7 +904,7 @@
 
 TEST_F(ResolverBuiltinDataTest, Modf_Error_VectorSizesDontMatch) {
     Global("whole", ty.vec4<f32>(), ast::StorageClass::kWorkgroup);
-    auto* call = Call("modf", vec2<f32>(1.0f, 2.0f), AddressOf("whole"));
+    auto* call = Call("modf", vec2<f32>(1_f, 2_f), AddressOf("whole"));
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -922,7 +922,7 @@
 TEST_P(ResolverBuiltinTest_SingleParam_FloatOrInt, Float_Scalar) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, 1.f);
+    auto* call = Call(param.name, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -934,7 +934,7 @@
 TEST_P(ResolverBuiltinTest_SingleParam_FloatOrInt, Float_Vector) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call(param.name, vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -947,7 +947,7 @@
 TEST_P(ResolverBuiltinTest_SingleParam_FloatOrInt, Sint_Scalar) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, i32(-1));
+    auto* call = Call(param.name, -1_i);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1015,7 +1015,7 @@
                          testing::Values(BuiltinData{"abs", BuiltinType::kAbs}));
 
 TEST_F(ResolverBuiltinTest, Length_Scalar) {
-    auto* call = Call("length", 1.f);
+    auto* call = Call("length", 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1025,7 +1025,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Length_FloatVector) {
-    auto* call = Call("length", vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call("length", vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1038,7 +1038,7 @@
 TEST_P(ResolverBuiltinTest_TwoParam, Scalar) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, 1.f, 1.f);
+    auto* call = Call(param.name, 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1050,7 +1050,7 @@
 TEST_P(ResolverBuiltinTest_TwoParam, Vector) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec3<f32>(1.0f, 1.0f, 3.0f), vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call(param.name, vec3<f32>(1_f, 1_f, 3_f), vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1097,7 +1097,7 @@
                                          BuiltinData{"step", BuiltinType::kStep}));
 
 TEST_F(ResolverBuiltinTest, Distance_Scalar) {
-    auto* call = Call("distance", 1.f, 1.f);
+    auto* call = Call("distance", 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1107,7 +1107,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Distance_Vector) {
-    auto* call = Call("distance", vec3<f32>(1.0f, 1.0f, 3.0f), vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call("distance", vec3<f32>(1_f, 1_f, 3_f), vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1117,7 +1117,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Cross) {
-    auto* call = Call("cross", vec3<f32>(1.0f, 2.0f, 3.0f), vec3<f32>(1.0f, 2.0f, 3.0f));
+    auto* call = Call("cross", vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(1_f, 2_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1141,7 +1141,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Cross_Error_Scalar) {
-    auto* call = Call("cross", 1.0f, 1.0f);
+    auto* call = Call("cross", 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1168,8 +1168,7 @@
 }
 
 TEST_F(ResolverBuiltinTest, Cross_Error_Vec4) {
-    auto* call =
-        Call("cross", vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f), vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f));
+    auto* call = Call("cross", vec4<f32>(1_f, 2_f, 3_f, 4_f), vec4<f32>(1_f, 2_f, 3_f, 4_f));
 
     WrapInFunction(call);
 
@@ -1184,8 +1183,8 @@
 }
 
 TEST_F(ResolverBuiltinTest, Cross_Error_TooManyParams) {
-    auto* call = Call("cross", vec3<f32>(1.0f, 2.0f, 3.0f), vec3<f32>(1.0f, 2.0f, 3.0f),
-                      vec3<f32>(1.0f, 2.0f, 3.0f));
+    auto* call =
+        Call("cross", vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(1_f, 2_f, 3_f));
 
     WrapInFunction(call);
 
@@ -1199,7 +1198,7 @@
 )");
 }
 TEST_F(ResolverBuiltinTest, Normalize) {
-    auto* call = Call("normalize", vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call("normalize", vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1226,7 +1225,7 @@
 TEST_P(ResolverBuiltinTest_ThreeParam, Scalar) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, 1.f, 1.f, 1.f);
+    auto* call = Call(param.name, 1_f, 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1238,8 +1237,8 @@
 TEST_P(ResolverBuiltinTest_ThreeParam, Vector) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec3<f32>(1.0f, 1.0f, 3.0f), vec3<f32>(1.0f, 1.0f, 3.0f),
-                      vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call(param.name, vec3<f32>(1_f, 1_f, 3_f), vec3<f32>(1_f, 1_f, 3_f),
+                      vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1271,7 +1270,7 @@
 TEST_P(ResolverBuiltinTest_ThreeParam_FloatOrInt, Float_Scalar) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, 1.f, 1.f, 1.f);
+    auto* call = Call(param.name, 1_f, 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1283,8 +1282,8 @@
 TEST_P(ResolverBuiltinTest_ThreeParam_FloatOrInt, Float_Vector) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec3<f32>(1.0f, 1.0f, 3.0f), vec3<f32>(1.0f, 1.0f, 3.0f),
-                      vec3<f32>(1.0f, 1.0f, 3.0f));
+    auto* call = Call(param.name, vec3<f32>(1_f, 1_f, 3_f), vec3<f32>(1_f, 1_f, 3_f),
+                      vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1443,7 +1442,7 @@
 TEST_P(ResolverBuiltinTest_FloatOrInt_TwoParam, Scalar_Float) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, 1.0f, 1.0f);
+    auto* call = Call(param.name, 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1481,7 +1480,7 @@
 TEST_P(ResolverBuiltinTest_FloatOrInt_TwoParam, Vector_Float) {
     auto param = GetParam();
 
-    auto* call = Call(param.name, vec3<f32>(1.f, 1.f, 3.f), vec3<f32>(1.f, 1.f, 3.f));
+    auto* call = Call(param.name, vec3<f32>(1_f, 1_f, 3_f), vec3<f32>(1_f, 1_f, 3_f));
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
diff --git a/src/tint/resolver/builtin_validation_test.cc b/src/tint/resolver/builtin_validation_test.cc
index 98e29fa..0e48b55 100644
--- a/src/tint/resolver/builtin_validation_test.cc
+++ b/src/tint/resolver/builtin_validation_test.cc
@@ -37,7 +37,7 @@
     // @stage(compute) @workgroup_size(1) fn func { return dpdx(1.0); }
 
     auto* dpdx =
-        create<ast::CallExpression>(Source{{3, 4}}, Expr("dpdx"), ast::ExpressionList{Expr(1.0f)});
+        create<ast::CallExpression>(Source{{3, 4}}, Expr("dpdx"), ast::ExpressionList{Expr(1_f)});
     Func(Source{{1, 2}}, "func", ast::VariableList{}, ty.void_(), {CallStmt(dpdx)},
          {Stage(ast::PipelineStage::kCompute), WorkgroupSize(1_i)});
 
@@ -52,7 +52,7 @@
     // @stage(compute) @workgroup_size(1) fn main { return f2(); }
 
     auto* dpdx =
-        create<ast::CallExpression>(Source{{3, 4}}, Expr("dpdx"), ast::ExpressionList{Expr(1.0f)});
+        create<ast::CallExpression>(Source{{3, 4}}, Expr("dpdx"), ast::ExpressionList{Expr(1_f)});
     Func(Source{{1, 2}}, "f0", {}, ty.void_(), {CallStmt(dpdx)});
 
     Func(Source{{3, 4}}, "f1", {}, ty.void_(), {CallStmt(Call("f0"))});
@@ -371,5 +371,71 @@
 
 }  // namespace texture_constexpr_args
 
+// TODO(crbug.com/tint/1497): Update or remove ResolverDP4aExtensionValidationTest when the
+// experimental extension chromium_experimental_dp4a is not needed.
+using ResolverDP4aExtensionValidationTest = ResolverTest;
+
+TEST_F(ResolverDP4aExtensionValidationTest, Dot4I8PackedWithExtension) {
+    // enable chromium_experimental_dp4a;
+    // fn func { return dot4I8Packed(1u, 2u); }
+    auto* ext =
+        create<ast::Enable>(Source{Source::Range{Source::Location{10, 2}, Source::Location{10, 5}}},
+                            "chromium_experimental_dp4a");
+    AST().AddEnable(ext);
+
+    Func("func", {}, ty.i32(),
+         {
+             Return(Call(Source{Source::Location{12, 34}}, "dot4I8Packed",
+                         ast::ExpressionList{Expr(1_u), Expr(2_u)})),
+         });
+
+    EXPECT_TRUE(r()->Resolve());
+}
+
+TEST_F(ResolverDP4aExtensionValidationTest, Dot4I8PackedWithoutExtension) {
+    // fn func { return dot4I8Packed(1u, 2u); }
+    Func("func", {}, ty.i32(),
+         {
+             Return(Call(Source{Source::Location{12, 34}}, "dot4I8Packed",
+                         ast::ExpressionList{Expr(1_u), Expr(2_u)})),
+         });
+
+    EXPECT_FALSE(r()->Resolve());
+    EXPECT_EQ(
+        r()->error(),
+        R"(12:34 error: cannot call built-in function 'dot4I8Packed' without extension chromium_experimental_dp4a)");
+}
+
+TEST_F(ResolverDP4aExtensionValidationTest, Dot4U8PackedWithExtension) {
+    // enable chromium_experimental_dp4a;
+    // fn func { return dot4U8Packed(1u, 2u); }
+    auto* ext =
+        create<ast::Enable>(Source{Source::Range{Source::Location{10, 2}, Source::Location{10, 5}}},
+                            "chromium_experimental_dp4a");
+    AST().AddEnable(ext);
+
+    Func("func", {}, ty.u32(),
+         {
+             Return(Call(Source{Source::Location{12, 34}}, "dot4U8Packed",
+                         ast::ExpressionList{Expr(1_u), Expr(2_u)})),
+         });
+
+    EXPECT_TRUE(r()->Resolve());
+}
+
+TEST_F(ResolverDP4aExtensionValidationTest, Dot4U8PackedWithoutExtension) {
+    // fn func { return dot4U8Packed(1u, 2u); }
+    Func("func", {}, ty.u32(),
+         {
+             Return(Call(Source{Source::Location{12, 34}}, "dot4U8Packed",
+                         ast::ExpressionList{Expr(1_u), Expr(2_u)})),
+         });
+
+    EXPECT_FALSE(r()->Resolve());
+    EXPECT_EQ(
+        r()->error(),
+        R"(12:34 error: cannot call built-in function 'dot4U8Packed' without extension chromium_experimental_dp4a)");
+}
+
 }  // namespace
 }  // namespace tint::resolver
diff --git a/src/tint/resolver/builtins_validation_test.cc b/src/tint/resolver/builtins_validation_test.cc
index 87835d6..9744e9b 100644
--- a/src/tint/resolver/builtins_validation_test.cc
+++ b/src/tint/resolver/builtins_validation_test.cc
@@ -132,7 +132,7 @@
     // ) -> @location(0) f32 { return 1.0; }
     auto* fd = Param("fd", ty.f32(),
                      ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kFragDepth)});
-    Func("fs_main", ast::VariableList{fd}, ty.f32(), {Return(1.0f)},
+    Func("fs_main", ast::VariableList{fd}, ty.f32(), {Return(1_f)},
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)}, {Location(0)});
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
@@ -152,7 +152,7 @@
         {Member("frag_depth", ty.f32(),
                 ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kFragDepth)})});
 
-    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
@@ -187,7 +187,7 @@
     auto* m = Member("position", ty.vec4<u32>(),
                      ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kPosition)});
     auto* s = Structure("MyInputs", {m});
-    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -197,7 +197,7 @@
 TEST_F(ResolverBuiltinsValidationTest, PositionNotF32_ReturnType_Fail) {
     // @stage(vertex)
     // fn main() -> @builtin(position) f32 { return 1.0; }
-    Func("main", {}, ty.f32(), {Return(1.0f)}, {Stage(ast::PipelineStage::kVertex)},
+    Func("main", {}, ty.f32(), {Return(1_f)}, {Stage(ast::PipelineStage::kVertex)},
          {Builtin(Source{{12, 34}}, ast::Builtin::kPosition)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -214,7 +214,7 @@
     auto* m = Member("frag_depth", ty.i32(),
                      ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kFragDepth)});
     auto* s = Structure("MyInputs", {m});
-    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -232,7 +232,7 @@
         "MyInputs",
         {Member("m", ty.f32(),
                 ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kSampleMask)})});
-    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -256,7 +256,7 @@
     // ) -> @location(0) f32 { return 1.0; }
     auto* arg = Param("arg", ty.bool_(),
                       ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kSampleMask)});
-    Func("fs_main", ast::VariableList{arg}, ty.f32(), {Return(1.0f)},
+    Func("fs_main", ast::VariableList{arg}, ty.f32(), {Return(1_f)},
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)}, {Location(0)});
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: store type of builtin(sample_mask) must be 'u32'");
@@ -273,7 +273,7 @@
         "MyInputs",
         {Member("m", ty.f32(),
                 ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kSampleIndex)})});
-    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -287,7 +287,7 @@
     // ) -> @location(0) f32 { return 1.0; }
     auto* arg = Param("arg", ty.bool_(),
                       ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kSampleIndex)});
-    Func("fs_main", ast::VariableList{arg}, ty.f32(), {Return(1.0f)},
+    Func("fs_main", ast::VariableList{arg}, ty.f32(), {Return(1_f)},
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)}, {Location(0)});
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: store type of builtin(sample_index) must be 'u32'");
@@ -300,7 +300,7 @@
     // ) -> @location(0) f32 { return 1.0; }
     auto* p = Param("p", ty.vec3<f32>(),
                     ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kPosition)});
-    Func("fs_main", ast::VariableList{p}, ty.f32(), {Return(1.0f)},
+    Func("fs_main", ast::VariableList{p}, ty.f32(), {Return(1_f)},
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)}, {Location(0)});
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: store type of builtin(position) must be 'vec4<f32>'");
@@ -503,7 +503,7 @@
                 ast::AttributeList{Builtin(ast::Builtin::kFrontFacing)}),
          Member("sample_index", ty.u32(), ast::AttributeList{Builtin(ast::Builtin::kSampleIndex)}),
          Member("sample_mask", ty.u32(), ast::AttributeList{Builtin(ast::Builtin::kSampleMask)})});
-    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("arg", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
@@ -517,7 +517,7 @@
     auto* is_front =
         Param("is_front", ty.i32(),
               ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kFrontFacing)});
-    Func("fs_main", ast::VariableList{is_front}, ty.f32(), {Return(1.0f)},
+    Func("fs_main", ast::VariableList{is_front}, ty.f32(), {Return(1_f)},
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -535,7 +535,7 @@
         "MyInputs",
         {Member("pos", ty.f32(),
                 ast::AttributeList{Builtin(Source{{12, 34}}, ast::Builtin::kFrontFacing)})});
-    Func("fragShader", {Param("is_front", ty.Of(s))}, ty.f32(), {Return(1.0f)},
+    Func("fragShader", {Param("is_front", ty.Of(s))}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_FALSE(r()->Resolve());
@@ -543,90 +543,88 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Length_Float_Scalar) {
-    auto* builtin = Call("length", 1.0f);
+    auto* builtin = Call("length", 1_f);
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Length_Float_Vec2) {
-    auto* builtin = Call("length", vec2<f32>(1.0f, 1.0f));
+    auto* builtin = Call("length", vec2<f32>(1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Length_Float_Vec3) {
-    auto* builtin = Call("length", vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("length", vec3<f32>(1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Length_Float_Vec4) {
-    auto* builtin = Call("length", vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("length", vec4<f32>(1_f, 1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Distance_Float_Scalar) {
-    auto* builtin = Call("distance", 1.0f, 1.0f);
+    auto* builtin = Call("distance", 1_f, 1_f);
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Distance_Float_Vec2) {
-    auto* builtin = Call("distance", vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* builtin = Call("distance", vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Distance_Float_Vec3) {
-    auto* builtin = Call("distance", vec3<f32>(1.0f, 1.0f, 1.0f), vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("distance", vec3<f32>(1_f, 1_f, 1_f), vec3<f32>(1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Distance_Float_Vec4) {
-    auto* builtin =
-        Call("distance", vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("distance", vec4<f32>(1_f, 1_f, 1_f, 1_f), vec4<f32>(1_f, 1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Determinant_Mat2x2) {
-    auto* builtin = Call("determinant", mat2x2<f32>(vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f)));
+    auto* builtin = Call("determinant", mat2x2<f32>(vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f)));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Determinant_Mat3x3) {
-    auto* builtin =
-        Call("determinant", mat3x3<f32>(vec3<f32>(1.0f, 1.0f, 1.0f), vec3<f32>(1.0f, 1.0f, 1.0f),
-                                        vec3<f32>(1.0f, 1.0f, 1.0f)));
+    auto* builtin = Call(
+        "determinant",
+        mat3x3<f32>(vec3<f32>(1_f, 1_f, 1_f), vec3<f32>(1_f, 1_f, 1_f), vec3<f32>(1_f, 1_f, 1_f)));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Determinant_Mat4x4) {
-    auto* builtin =
-        Call("determinant",
-             mat4x4<f32>(vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f),
-                         vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f)));
+    auto* builtin = Call("determinant",
+                         mat4x4<f32>(vec4<f32>(1_f, 1_f, 1_f, 1_f), vec4<f32>(1_f, 1_f, 1_f, 1_f),
+                                     vec4<f32>(1_f, 1_f, 1_f, 1_f), vec4<f32>(1_f, 1_f, 1_f, 1_f)));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Frexp_Scalar) {
-    auto* builtin = Call("frexp", 1.0f);
+    auto* builtin = Call("frexp", 1_f);
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -639,7 +637,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Frexp_Vec2) {
-    auto* builtin = Call("frexp", vec2<f32>(1.0f, 1.0f));
+    auto* builtin = Call("frexp", vec2<f32>(1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -656,7 +654,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Frexp_Vec3) {
-    auto* builtin = Call("frexp", vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("frexp", vec3<f32>(1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -673,7 +671,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Frexp_Vec4) {
-    auto* builtin = Call("frexp", vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("frexp", vec4<f32>(1_f, 1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -690,7 +688,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Modf_Scalar) {
-    auto* builtin = Call("modf", 1.0f);
+    auto* builtin = Call("modf", 1_f);
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -703,7 +701,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Modf_Vec2) {
-    auto* builtin = Call("modf", vec2<f32>(1.0f, 1.0f));
+    auto* builtin = Call("modf", vec2<f32>(1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -720,7 +718,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Modf_Vec3) {
-    auto* builtin = Call("modf", vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("modf", vec3<f32>(1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -737,7 +735,7 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Modf_Vec4) {
-    auto* builtin = Call("modf", vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("modf", vec4<f32>(1_f, 1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -754,36 +752,35 @@
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Cross_Float_Vec3) {
-    auto* builtin = Call("cross", vec3<f32>(1.0f, 1.0f, 1.0f), vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("cross", vec3<f32>(1_f, 1_f, 1_f), vec3<f32>(1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Dot_Float_Vec2) {
-    auto* builtin = Call("dot", vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* builtin = Call("dot", vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Dot_Float_Vec3) {
-    auto* builtin = Call("dot", vec3<f32>(1.0f, 1.0f, 1.0f), vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("dot", vec3<f32>(1_f, 1_f, 1_f), vec3<f32>(1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Dot_Float_Vec4) {
-    auto* builtin =
-        Call("dot", vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+    auto* builtin = Call("dot", vec4<f32>(1_f, 1_f, 1_f, 1_f), vec4<f32>(1_f, 1_f, 1_f, 1_f));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
 
 TEST_F(ResolverBuiltinsValidationTest, Select_Float_Scalar) {
-    auto* builtin = Call("select", Expr(1.0f), Expr(1.0f), Expr(true));
+    auto* builtin = Call("select", Expr(1_f), Expr(1_f), Expr(true));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -805,7 +802,7 @@
 
 TEST_F(ResolverBuiltinsValidationTest, Select_Float_Vec2) {
     auto* builtin =
-        Call("select", vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f), vec2<bool>(true, true));
+        Call("select", vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f), vec2<bool>(true, true));
     WrapInFunction(builtin);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -840,7 +837,7 @@
 
     ast::ExpressionList params;
     for (uint32_t i = 0; i < num_params; ++i) {
-        params.push_back(Expr(1.0f));
+        params.push_back(Expr(1_f));
     }
     auto* builtin = Call(name, params);
     Func("func", {}, ty.void_(), {CallStmt(builtin)},
@@ -856,7 +853,7 @@
 
     ast::ExpressionList params;
     for (uint32_t i = 0; i < num_params; ++i) {
-        params.push_back(vec2<f32>(1.0f, 1.0f));
+        params.push_back(vec2<f32>(1_f, 1_f));
     }
     auto* builtin = Call(name, params);
     Func("func", {}, ty.void_(), {CallStmt(builtin)},
@@ -872,7 +869,7 @@
 
     ast::ExpressionList params;
     for (uint32_t i = 0; i < num_params; ++i) {
-        params.push_back(vec3<f32>(1.0f, 1.0f, 1.0f));
+        params.push_back(vec3<f32>(1_f, 1_f, 1_f));
     }
     auto* builtin = Call(name, params);
     Func("func", {}, ty.void_(), {CallStmt(builtin)},
@@ -888,7 +885,7 @@
 
     ast::ExpressionList params;
     for (uint32_t i = 0; i < num_params; ++i) {
-        params.push_back(vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+        params.push_back(vec4<f32>(1_f, 1_f, 1_f, 1_f));
     }
     auto* builtin = Call(name, params);
     Func("func", {}, ty.void_(), {CallStmt(builtin)},
@@ -1126,7 +1123,7 @@
 
 TEST_P(DataPacking4x8, Float_Vec4) {
     auto name = GetParam();
-    auto* builtin = Call(name, vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f));
+    auto* builtin = Call(name, vec4<f32>(1_f, 1_f, 1_f, 1_f));
     WrapInFunction(builtin);
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
@@ -1139,7 +1136,7 @@
 
 TEST_P(DataPacking2x16, Float_Vec2) {
     auto name = GetParam();
-    auto* builtin = Call(name, vec2<f32>(1.0f, 1.0f));
+    auto* builtin = Call(name, vec2<f32>(1_f, 1_f));
     WrapInFunction(builtin);
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
diff --git a/src/tint/resolver/call_test.cc b/src/tint/resolver/call_test.cc
index c8b9856..d84f300 100644
--- a/src/tint/resolver/call_test.cc
+++ b/src/tint/resolver/call_test.cc
@@ -18,6 +18,8 @@
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/resolver/resolver_test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::resolver {
 namespace {
 // Helpers and typedefs
@@ -86,7 +88,7 @@
         args.push_back(p.create_value(*this, 0));
     }
 
-    auto* func = Func("foo", std::move(params), ty.f32(), {Return(1.23f)});
+    auto* func = Func("foo", std::move(params), ty.f32(), {Return(1.23_f)});
     auto* call_expr = Call("foo", std::move(args));
     WrapInFunction(call_expr);
 
diff --git a/src/tint/resolver/call_validation_test.cc b/src/tint/resolver/call_validation_test.cc
index 756ba5c..84d2a51 100644
--- a/src/tint/resolver/call_validation_test.cc
+++ b/src/tint/resolver/call_validation_test.cc
@@ -36,7 +36,7 @@
 
 TEST_F(ResolverCallValidationTest, TooManyArgs) {
     Func("foo", {Param(Sym(), ty.i32()), Param(Sym(), ty.f32())}, ty.void_(), {Return()});
-    auto* call = Call(Source{{12, 34}}, "foo", 1_i, 1.0f, 1.0f);
+    auto* call = Call(Source{{12, 34}}, "foo", 1_i, 1_f, 1_f);
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -45,7 +45,7 @@
 
 TEST_F(ResolverCallValidationTest, MismatchedArgs) {
     Func("foo", {Param(Sym(), ty.i32()), Param(Sym(), ty.f32())}, ty.void_(), {Return()});
-    auto* call = Call("foo", Expr(Source{{12, 34}}, true), 1.0f);
+    auto* call = Call("foo", Expr(Source{{12, 34}}, true), 1_f);
     WrapInFunction(call);
 
     EXPECT_FALSE(r()->Resolve());
@@ -58,7 +58,7 @@
     // fn func() -> f32 { return 1.0; }
     // fn main() {func(); return; }
 
-    Func("func", {}, ty.f32(), {Return(Expr(1.0f))}, {});
+    Func("func", {}, ty.f32(), {Return(Expr(1_f))}, {});
 
     Func("main", {}, ty.void_(),
          {
@@ -139,7 +139,7 @@
     Func("main", {}, ty.void_(),
          {
              Decl(Let("v", ty.Of(S), Construct(ty.Of(S)))),
-             CallStmt(Call("foo", AddressOf(Expr(Source{{12, 34}}, MemberAccessor("v", "m"))))),
+             CallStmt(Call("foo", AddressOf(MemberAccessor(Source{{12, 34}}, "v", "m")))),
          });
 
     EXPECT_FALSE(r()->Resolve());
diff --git a/src/tint/resolver/compound_assignment_validation_test.cc b/src/tint/resolver/compound_assignment_validation_test.cc
index 1bfffb9..1ae7040 100644
--- a/src/tint/resolver/compound_assignment_validation_test.cc
+++ b/src/tint/resolver/compound_assignment_validation_test.cc
@@ -68,7 +68,7 @@
 
     auto* var = Var("a", ty.i32(), ast::StorageClass::kNone, Expr(2_i));
 
-    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 2.3f, ast::BinaryOp::kAdd);
+    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 2.3_f, ast::BinaryOp::kAdd);
     WrapInFunction(var, assign);
 
     ASSERT_FALSE(r()->Resolve());
@@ -83,9 +83,9 @@
     //   a |= 2.0;
     // }
 
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(1.f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(1_f));
 
-    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 2.0f, ast::BinaryOp::kOr);
+    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 2_f, ast::BinaryOp::kOr);
     WrapInFunction(var, assign);
 
     ASSERT_FALSE(r()->Resolve());
@@ -102,7 +102,7 @@
 
     auto* var = Var("a", ty.vec4<f32>(), ast::StorageClass::kNone);
 
-    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 1.f, ast::BinaryOp::kAdd);
+    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 1_f, ast::BinaryOp::kAdd);
     WrapInFunction(var, assign);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -132,7 +132,7 @@
 
     auto* var = Var("a", ty.mat4x4<f32>(), ast::StorageClass::kNone);
 
-    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 2.f, ast::BinaryOp::kMultiply);
+    auto* assign = CompoundAssign(Source{{12, 34}}, "a", 2_f, ast::BinaryOp::kMultiply);
     WrapInFunction(var, assign);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
diff --git a/src/tint/resolver/control_block_validation_test.cc b/src/tint/resolver/control_block_validation_test.cc
index b4742c9..a5ba7ca 100644
--- a/src/tint/resolver/control_block_validation_test.cc
+++ b/src/tint/resolver/control_block_validation_test.cc
@@ -30,7 +30,7 @@
     // switch (a) {
     //   default: {}
     // }
-    auto* var = Var("a", ty.f32(), Expr(3.14f));
+    auto* var = Var("a", ty.f32(), Expr(3.14_f));
 
     auto* block = Block(Decl(var), Switch(Expr(Source{{12, 34}}, "a"),  //
                                           DefaultCase()));
@@ -232,9 +232,9 @@
     // }
     auto* var = Var("a", ty.u32(), Expr(2_u));
 
-    auto* block = Block(Decl(var),                                       //
-                        Switch("a",                                      //
-                               Case(Source{{12, 34}}, {Expr(i32(-1))}),  //
+    auto* block = Block(Decl(var),                                    //
+                        Switch("a",                                   //
+                               Case(Source{{12, 34}}, {Expr(-1_i)}),  //
                                DefaultCase()));
     WrapInFunction(block);
 
@@ -281,12 +281,12 @@
 
     auto* block = Block(Decl(var),   //
                         Switch("a",  //
-                               Case(Expr(Source{{12, 34}}, i32(-10))),
+                               Case(Expr(Source{{12, 34}}, -10_i)),
                                Case({
                                    Expr(0_i),
                                    Expr(1_i),
                                    Expr(2_i),
-                                   Expr(Source{{56, 78}}, i32(-10)),
+                                   Expr(Source{{56, 78}}, -10_i),
                                }),
                                DefaultCase()));
     WrapInFunction(block);
diff --git a/src/tint/resolver/dependency_graph_test.cc b/src/tint/resolver/dependency_graph_test.cc
index 248dc87..82b0a69 100644
--- a/src/tint/resolver/dependency_graph_test.cc
+++ b/src/tint/resolver/dependency_graph_test.cc
@@ -717,9 +717,10 @@
     // }
     // var G: f32 = 2.1;
 
-    Func("F", ast::VariableList{}, ty.void_(), {Block(Assign(Expr(Source{{12, 34}}, "G"), 3.14f))});
+    Func("F", ast::VariableList{}, ty.void_(),
+         {Block(Assign(Expr(Source{{12, 34}}, "G"), 3.14_f))});
 
-    Global(Source{{56, 78}}, "G", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1f));
+    Global(Source{{56, 78}}, "G", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1_f));
 
     Build();
 }
diff --git a/src/tint/resolver/entry_point_validation_test.cc b/src/tint/resolver/entry_point_validation_test.cc
index d1d9a48..3028d9b 100644
--- a/src/tint/resolver/entry_point_validation_test.cc
+++ b/src/tint/resolver/entry_point_validation_test.cc
@@ -49,7 +49,7 @@
 TEST_F(ResolverEntryPointValidationTest, ReturnTypeAttribute_Location) {
     // @stage(fragment)
     // fn main() -> @location(0) f32 { return 1.0; }
-    Func(Source{{12, 34}}, "main", {}, ty.f32(), {Return(1.0f)},
+    Func(Source{{12, 34}}, "main", {}, ty.f32(), {Return(1_f)},
          {Stage(ast::PipelineStage::kFragment)}, {Location(0)});
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -501,7 +501,7 @@
     // @stage(fragment)
     // fn main(param : Input) {}
     auto* input =
-        Structure("Input", {Member(Source{{13, 43}}, "a", ty.array<float>(), {Location(0)})});
+        Structure("Input", {Member(Source{{13, 43}}, "a", ty.array<f32>(), {Location(0)})});
     auto* param = Param("param", ty.Of(input));
     Func(Source{{12, 34}}, "main", {param}, ty.void_(), {}, {Stage(ast::PipelineStage::kFragment)});
 
@@ -633,7 +633,7 @@
     // fn main() -> Output {
     //   return Output();
     // }
-    auto* output = Structure("Output", {Member(Source{{13, 43}}, "a", ty.array<float>(),
+    auto* output = Structure("Output", {Member(Source{{13, 43}}, "a", ty.array<f32>(),
                                                {Location(Source{{12, 34}}, 0)})});
     Func(Source{{12, 34}}, "main", {}, ty.Of(output), {Return(Construct(ty.Of(output)))},
          {Stage(ast::PipelineStage::kFragment)});
diff --git a/src/tint/resolver/function_validation_test.cc b/src/tint/resolver/function_validation_test.cc
index 1bc70a5..ce37ba5 100644
--- a/src/tint/resolver/function_validation_test.cc
+++ b/src/tint/resolver/function_validation_test.cc
@@ -288,7 +288,7 @@
     // fn func() -> f32 { return 2.0; }
     Func("func", ast::VariableList{}, ty.f32(),
          ast::StatementList{
-             Return(Source{{12, 34}}, Expr(2.f)),
+             Return(Source{{12, 34}}, Expr(2_f)),
          },
          ast::AttributeList{});
 
@@ -315,7 +315,7 @@
     auto* myf32 = Alias("myf32", ty.f32());
     Func("func", ast::VariableList{}, ty.Of(myf32),
          ast::StatementList{
-             Return(Source{{12, 34}}, Expr(2.f)),
+             Return(Source{{12, 34}}, Expr(2_f)),
          },
          ast::AttributeList{});
 
@@ -539,7 +539,7 @@
     // fn main() {}
 
     Func("main", {}, ty.void_(), {},
-         {Stage(ast::PipelineStage::kCompute), WorkgroupSize(Expr(Source{{12, 34}}, 64.f))});
+         {Stage(ast::PipelineStage::kCompute), WorkgroupSize(Expr(Source{{12, 34}}, 64_f))});
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
@@ -552,7 +552,7 @@
     // fn main() {}
 
     Func("main", {}, ty.void_(), {},
-         {Stage(ast::PipelineStage::kCompute), WorkgroupSize(Expr(Source{{12, 34}}, i32(-2)))});
+         {Stage(ast::PipelineStage::kCompute), WorkgroupSize(Expr(Source{{12, 34}}, -2_i))});
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: workgroup_size argument must be at least 1");
@@ -573,7 +573,7 @@
     // let x = 64.0;
     // @stage(compute) @workgroup_size(x)
     // fn main() {}
-    GlobalConst("x", ty.f32(), Expr(64.f));
+    GlobalConst("x", ty.f32(), Expr(64_f));
     Func("main", {}, ty.void_(), {},
          {Stage(ast::PipelineStage::kCompute), WorkgroupSize(Expr(Source{{12, 34}}, "x"))});
 
@@ -587,7 +587,7 @@
     // let x = -2i;
     // @stage(compute) @workgroup_size(x)
     // fn main() {}
-    GlobalConst("x", ty.i32(), Expr(i32(-2)));
+    GlobalConst("x", ty.i32(), Expr(-2_i));
     Func("main", {}, ty.void_(), {},
          {Stage(ast::PipelineStage::kCompute), WorkgroupSize(Expr(Source{{12, 34}}, "x"))});
 
diff --git a/src/tint/resolver/increment_decrement_validation_test.cc b/src/tint/resolver/increment_decrement_validation_test.cc
index 37033c5..e03352e 100644
--- a/src/tint/resolver/increment_decrement_validation_test.cc
+++ b/src/tint/resolver/increment_decrement_validation_test.cc
@@ -101,7 +101,7 @@
 TEST_F(ResolverIncrementDecrementValidationTest, Float) {
     // var a : f32 = 2.0;
     // a++;
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
     auto* inc = Increment(Expr(Source{{12, 34}}, "a"));
     WrapInFunction(var, inc);
 
diff --git a/src/tint/resolver/intrinsic_table.inl b/src/tint/resolver/intrinsic_table.inl
index f29c291..9981bb8 100644
--- a/src/tint/resolver/intrinsic_table.inl
+++ b/src/tint/resolver/intrinsic_table.inl
@@ -1675,7 +1675,7 @@
 
 constexpr MatcherIndex kMatcherIndices[] = {
   /* [0] */ 30,
-  /* [1] */ 5,
+  /* [1] */ 4,
   /* [2] */ 10,
   /* [3] */ 0,
   /* [4] */ 11,
@@ -1691,12 +1691,12 @@
   /* [14] */ 0,
   /* [15] */ 2,
   /* [16] */ 9,
-  /* [17] */ 1,
-  /* [18] */ 0,
+  /* [17] */ 0,
+  /* [18] */ 1,
   /* [19] */ 2,
   /* [20] */ 9,
-  /* [21] */ 0,
-  /* [22] */ 1,
+  /* [21] */ 1,
+  /* [22] */ 0,
   /* [23] */ 2,
   /* [24] */ 9,
   /* [25] */ 0,
@@ -1715,112 +1715,112 @@
   /* [38] */ 8,
   /* [39] */ 0,
   /* [40] */ 0,
-  /* [41] */ 8,
-  /* [42] */ 1,
-  /* [43] */ 2,
-  /* [44] */ 8,
+  /* [41] */ 29,
+  /* [42] */ 0,
+  /* [43] */ 1,
+  /* [44] */ 30,
   /* [45] */ 0,
-  /* [46] */ 3,
+  /* [46] */ 1,
   /* [47] */ 8,
-  /* [48] */ 0,
-  /* [49] */ 4,
-  /* [50] */ 29,
-  /* [51] */ 5,
-  /* [52] */ 10,
-  /* [53] */ 28,
-  /* [54] */ 5,
-  /* [55] */ 10,
-  /* [56] */ 27,
-  /* [57] */ 5,
-  /* [58] */ 10,
-  /* [59] */ 30,
-  /* [60] */ 4,
-  /* [61] */ 10,
-  /* [62] */ 29,
-  /* [63] */ 4,
+  /* [48] */ 1,
+  /* [49] */ 2,
+  /* [50] */ 28,
+  /* [51] */ 0,
+  /* [52] */ 1,
+  /* [53] */ 27,
+  /* [54] */ 0,
+  /* [55] */ 1,
+  /* [56] */ 8,
+  /* [57] */ 0,
+  /* [58] */ 3,
+  /* [59] */ 8,
+  /* [60] */ 0,
+  /* [61] */ 4,
+  /* [62] */ 27,
+  /* [63] */ 3,
   /* [64] */ 10,
   /* [65] */ 28,
-  /* [66] */ 4,
+  /* [66] */ 3,
   /* [67] */ 10,
-  /* [68] */ 27,
-  /* [69] */ 4,
+  /* [68] */ 29,
+  /* [69] */ 3,
   /* [70] */ 10,
   /* [71] */ 30,
   /* [72] */ 3,
   /* [73] */ 10,
-  /* [74] */ 29,
-  /* [75] */ 3,
+  /* [74] */ 27,
+  /* [75] */ 4,
   /* [76] */ 10,
   /* [77] */ 28,
-  /* [78] */ 3,
+  /* [78] */ 4,
   /* [79] */ 10,
-  /* [80] */ 27,
-  /* [81] */ 3,
+  /* [80] */ 30,
+  /* [81] */ 5,
   /* [82] */ 10,
   /* [83] */ 29,
-  /* [84] */ 0,
-  /* [85] */ 1,
-  /* [86] */ 30,
-  /* [87] */ 0,
-  /* [88] */ 1,
+  /* [84] */ 5,
+  /* [85] */ 10,
+  /* [86] */ 29,
+  /* [87] */ 4,
+  /* [88] */ 10,
   /* [89] */ 28,
-  /* [90] */ 0,
-  /* [91] */ 1,
+  /* [90] */ 5,
+  /* [91] */ 10,
   /* [92] */ 27,
-  /* [93] */ 0,
-  /* [94] */ 1,
-  /* [95] */ 5,
+  /* [93] */ 5,
+  /* [94] */ 10,
+  /* [95] */ 6,
   /* [96] */ 3,
-  /* [97] */ 6,
-  /* [98] */ 2,
-  /* [99] */ 35,
-  /* [100] */ 0,
-  /* [101] */ 5,
-  /* [102] */ 0,
-  /* [103] */ 7,
-  /* [104] */ 2,
+  /* [97] */ 7,
+  /* [98] */ 3,
+  /* [99] */ 5,
+  /* [100] */ 3,
+  /* [101] */ 7,
+  /* [102] */ 4,
+  /* [103] */ 15,
+  /* [104] */ 0,
   /* [105] */ 7,
   /* [106] */ 0,
-  /* [107] */ 21,
+  /* [107] */ 16,
   /* [108] */ 0,
-  /* [109] */ 6,
-  /* [110] */ 3,
-  /* [111] */ 18,
+  /* [109] */ 7,
+  /* [110] */ 2,
+  /* [111] */ 17,
   /* [112] */ 0,
-  /* [113] */ 17,
-  /* [114] */ 0,
-  /* [115] */ 16,
+  /* [113] */ 5,
+  /* [114] */ 2,
+  /* [115] */ 33,
   /* [116] */ 0,
-  /* [117] */ 15,
+  /* [117] */ 18,
   /* [118] */ 0,
-  /* [119] */ 7,
-  /* [120] */ 4,
-  /* [121] */ 7,
-  /* [122] */ 3,
-  /* [123] */ 5,
+  /* [119] */ 21,
+  /* [120] */ 0,
+  /* [121] */ 6,
+  /* [122] */ 2,
+  /* [123] */ 20,
   /* [124] */ 2,
-  /* [125] */ 33,
+  /* [125] */ 19,
   /* [126] */ 0,
   /* [127] */ 19,
-  /* [128] */ 0,
+  /* [128] */ 2,
   /* [129] */ 20,
   /* [130] */ 0,
-  /* [131] */ 20,
+  /* [131] */ 18,
   /* [132] */ 2,
-  /* [133] */ 19,
+  /* [133] */ 17,
   /* [134] */ 2,
-  /* [135] */ 18,
-  /* [136] */ 2,
-  /* [137] */ 17,
-  /* [138] */ 2,
+  /* [135] */ 5,
+  /* [136] */ 0,
+  /* [137] */ 35,
+  /* [138] */ 0,
   /* [139] */ 16,
   /* [140] */ 2,
   /* [141] */ 15,
   /* [142] */ 2,
-  /* [143] */ 24,
-  /* [144] */ 13,
-  /* [145] */ 25,
-  /* [146] */ 23,
+  /* [143] */ 13,
+  /* [144] */ 23,
+  /* [145] */ 24,
+  /* [146] */ 25,
   /* [147] */ 22,
   /* [148] */ 26,
   /* [149] */ 14,
@@ -1839,72 +1839,72 @@
   {
     /* [0] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [1] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [2] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [3] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [4] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [5] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [6] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [7] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [8] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [9] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [10] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [11] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kDdx,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [12] */
-    /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kDdy,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [13] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [14] */
@@ -1914,12 +1914,12 @@
   {
     /* [15] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [16] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [17] */
@@ -1929,102 +1929,102 @@
   {
     /* [18] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [19] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [20] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [21] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [22] */
-    /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [23] */
-    /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [24] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [25] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [26] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [27] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [28] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [29] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [30] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [31] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [32] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [33] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [34] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [35] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [36] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [37] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [38] */
@@ -2034,12 +2034,12 @@
   {
     /* [39] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [40] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [41] */
@@ -2049,172 +2049,172 @@
   {
     /* [42] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [43] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [44] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [45] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [46] */
     /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [47] */
     /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [48] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* matcher indices */ &kMatcherIndices[95],
   },
   {
     /* [49] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* usage */ ParameterUsage::kComponent,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [50] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[111],
   },
   {
     /* [51] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [52] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [53] */
-    /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [54] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [55] */
-    /* usage */ ParameterUsage::kComponent,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [56] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [57] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [58] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [59] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kBias,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [60] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [61] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [62] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[149],
   },
   {
     /* [63] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [64] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [65] */
-    /* usage */ ParameterUsage::kBias,
+    /* usage */ ParameterUsage::kDepthRef,
     /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [66] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [67] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[139],
   },
   {
     /* [68] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [69] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [70] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kDdx,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [71] */
-    /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kDdy,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [72] */
-    /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kOffset,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [73] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [74] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [75] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [76] */
@@ -2224,37 +2224,37 @@
   {
     /* [77] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* matcher indices */ &kMatcherIndices[95],
   },
   {
     /* [78] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [79] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [80] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [81] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [82] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [83] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [84] */
@@ -2264,12 +2264,12 @@
   {
     /* [85] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [86] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [87] */
@@ -2284,12 +2284,12 @@
   {
     /* [89] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [90] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [91] */
@@ -2299,137 +2299,137 @@
   {
     /* [92] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [93] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [94] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [95] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [96] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kDdx,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [97] */
-    /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kDdy,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [98] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [99] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[149],
   },
   {
     /* [100] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [101] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [102] */
-    /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
-  },
-  {
-    /* [103] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
-  },
-  {
-    /* [104] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[149],
-  },
-  {
-    /* [105] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
-  },
-  {
-    /* [106] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
-  },
-  {
-    /* [107] */
     /* usage */ ParameterUsage::kDepthRef,
     /* matcher indices */ &kMatcherIndices[15],
   },
   {
-    /* [108] */
+    /* [103] */
     /* usage */ ParameterUsage::kTexture,
     /* matcher indices */ &kMatcherIndices[139],
   },
   {
+    /* [104] */
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
+  },
+  {
+    /* [105] */
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
+  },
+  {
+    /* [106] */
+    /* usage */ ParameterUsage::kDdx,
+    /* matcher indices */ &kMatcherIndices[113],
+  },
+  {
+    /* [107] */
+    /* usage */ ParameterUsage::kDdy,
+    /* matcher indices */ &kMatcherIndices[113],
+  },
+  {
+    /* [108] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[123],
+  },
+  {
     /* [109] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [110] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [111] */
-    /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [112] */
-    /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [113] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [114] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [115] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [116] */
-    /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [117] */
-    /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kBias,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [118] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [119] */
@@ -2439,12 +2439,12 @@
   {
     /* [120] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [121] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [122] */
@@ -2454,22 +2454,22 @@
   {
     /* [123] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [124] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [125] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [126] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [127] */
@@ -2479,32 +2479,32 @@
   {
     /* [128] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [129] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [130] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [131] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [132] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [133] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [134] */
@@ -2514,12 +2514,12 @@
   {
     /* [135] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [136] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [137] */
@@ -2529,7 +2529,7 @@
   {
     /* [138] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [139] */
@@ -2539,12 +2539,12 @@
   {
     /* [140] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [141] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [142] */
@@ -2554,77 +2554,77 @@
   {
     /* [143] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[127],
   },
   {
     /* [144] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[149],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [145] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [146] */
-    /* usage */ ParameterUsage::kDepthRef,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kDdx,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [147] */
-    /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kDdy,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [148] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [149] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [150] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [151] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [152] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [153] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [154] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[149],
   },
   {
     /* [155] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [156] */
-    /* usage */ ParameterUsage::kDdx,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kDepthRef,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [157] */
-    /* usage */ ParameterUsage::kDdy,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kOffset,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [158] */
@@ -2639,7 +2639,7 @@
   {
     /* [160] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [161] */
@@ -2649,12 +2649,12 @@
   {
     /* [162] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [163] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [164] */
@@ -2664,12 +2664,12 @@
   {
     /* [165] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [166] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [167] */
@@ -2684,72 +2684,72 @@
   {
     /* [169] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [170] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [171] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [172] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [173] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [174] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [175] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [176] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [177] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [178] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [179] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [180] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [181] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [182] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [183] */
@@ -2759,12 +2759,12 @@
   {
     /* [184] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [185] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [186] */
@@ -2774,7 +2774,7 @@
   {
     /* [187] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [188] */
@@ -2789,7 +2789,7 @@
   {
     /* [190] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [191] */
@@ -2799,27 +2799,27 @@
   {
     /* [192] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [193] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[133],
   },
   {
     /* [194] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [195] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [196] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [197] */
@@ -2829,7 +2829,7 @@
   {
     /* [198] */
     /* usage */ ParameterUsage::kComponent,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [199] */
@@ -2839,67 +2839,67 @@
   {
     /* [200] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [201] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [202] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [203] */
     /* usage */ ParameterUsage::kComponent,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [204] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[107],
   },
   {
     /* [205] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [206] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [207] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [208] */
     /* usage */ ParameterUsage::kComponent,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [209] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[111],
   },
   {
     /* [210] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [211] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [212] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [213] */
@@ -2909,62 +2909,62 @@
   {
     /* [214] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [215] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [216] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
-  },
-  {
-    /* [217] */
     /* usage */ ParameterUsage::kLevel,
     /* matcher indices */ &kMatcherIndices[15],
   },
   {
+    /* [217] */
+    /* usage */ ParameterUsage::kOffset,
+    /* matcher indices */ &kMatcherIndices[95],
+  },
+  {
     /* [218] */
     /* usage */ ParameterUsage::kComponent,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [219] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[125],
   },
   {
     /* [220] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [221] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [222] */
     /* usage */ ParameterUsage::kComponent,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [223] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[107],
   },
   {
     /* [224] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [225] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [226] */
@@ -2974,62 +2974,62 @@
   {
     /* [227] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [228] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [229] */
     /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [230] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [231] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [232] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [233] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [234] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [235] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [236] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [237] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [238] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [239] */
@@ -3039,7 +3039,7 @@
   {
     /* [240] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [241] */
@@ -3059,7 +3059,7 @@
   {
     /* [244] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [245] */
@@ -3079,7 +3079,7 @@
   {
     /* [248] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [249] */
@@ -3089,27 +3089,27 @@
   {
     /* [250] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[68],
   },
   {
     /* [251] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [252] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [253] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [254] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [255] */
@@ -3119,7 +3119,7 @@
   {
     /* [256] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [257] */
@@ -3139,7 +3139,7 @@
   {
     /* [260] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [261] */
@@ -3149,7 +3149,7 @@
   {
     /* [262] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [263] */
@@ -3159,7 +3159,7 @@
   {
     /* [264] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [265] */
@@ -3169,77 +3169,77 @@
   {
     /* [266] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[127],
   },
   {
     /* [267] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [268] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [269] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kBias,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [270] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [271] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [272] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [273] */
-    /* usage */ ParameterUsage::kLevel,
+    /* usage */ ParameterUsage::kBias,
     /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [274] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [275] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [276] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [277] */
-    /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [278] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[127],
   },
   {
     /* [279] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [280] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [281] */
@@ -3249,322 +3249,322 @@
   {
     /* [282] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [283] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [284] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [285] */
-    /* usage */ ParameterUsage::kBias,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [286] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [287] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [288] */
     /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [289] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [290] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [291] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [292] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [293] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [294] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
+    /* matcher indices */ &kMatcherIndices[111],
   },
   {
     /* [295] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [296] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [297] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [298] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[50],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [299] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [300] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [301] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [302] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [303] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [304] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [305] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kOffset,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [306] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* matcher indices */ &kMatcherIndices[83],
   },
   {
     /* [307] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [308] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [309] */
-    /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[101],
   },
   {
     /* [310] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[131],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [311] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [312] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [313] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [314] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[123],
   },
   {
     /* [315] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [316] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [317] */
-    /* usage */ ParameterUsage::kOffset,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [318] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[62],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [319] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [320] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
-  },
-  {
-    /* [321] */
-    /* usage */ ParameterUsage::kValue,
+    /* usage */ ParameterUsage::kCoords,
     /* matcher indices */ &kMatcherIndices[121],
   },
   {
-    /* [322] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
-  },
-  {
-    /* [323] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
-  },
-  {
-    /* [324] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
-  },
-  {
-    /* [325] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[15],
-  },
-  {
-    /* [326] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[74],
-  },
-  {
-    /* [327] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
-  },
-  {
-    /* [328] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
-  },
-  {
-    /* [329] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[103],
-  },
-  {
-    /* [330] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
-  },
-  {
-    /* [331] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
-  },
-  {
-    /* [332] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
-  },
-  {
-    /* [333] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
-  },
-  {
-    /* [334] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
-  },
-  {
-    /* [335] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
-  },
-  {
-    /* [336] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
-  },
-  {
-    /* [337] */
+    /* [321] */
     /* usage */ ParameterUsage::kOffset,
     /* matcher indices */ &kMatcherIndices[95],
   },
   {
-    /* [338] */
+    /* [322] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[137],
+    /* matcher indices */ &kMatcherIndices[86],
+  },
+  {
+    /* [323] */
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
+  },
+  {
+    /* [324] */
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
+  },
+  {
+    /* [325] */
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[97],
+  },
+  {
+    /* [326] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[139],
+  },
+  {
+    /* [327] */
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
+  },
+  {
+    /* [328] */
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
+  },
+  {
+    /* [329] */
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[15],
+  },
+  {
+    /* [330] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[139],
+  },
+  {
+    /* [331] */
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
+  },
+  {
+    /* [332] */
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
+  },
+  {
+    /* [333] */
+    /* usage */ ParameterUsage::kOffset,
+    /* matcher indices */ &kMatcherIndices[99],
+  },
+  {
+    /* [334] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[133],
+  },
+  {
+    /* [335] */
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
+  },
+  {
+    /* [336] */
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
+  },
+  {
+    /* [337] */
+    /* usage */ ParameterUsage::kArrayIndex,
+    /* matcher indices */ &kMatcherIndices[58],
+  },
+  {
+    /* [338] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [339] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [340] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [341] */
-    /* usage */ ParameterUsage::kArrayIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [342] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [343] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [344] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [345] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [346] */
@@ -3574,12 +3574,12 @@
   {
     /* [347] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [348] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [349] */
@@ -3588,63 +3588,63 @@
   },
   {
     /* [350] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[2],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[74],
   },
   {
     /* [351] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [352] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[97],
   },
   {
     /* [353] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[2],
   },
   {
     /* [354] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [355] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [356] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [357] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [358] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [359] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[68],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [360] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [361] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[121],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [362] */
@@ -3669,87 +3669,87 @@
   {
     /* [366] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [367] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [368] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [369] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [370] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [371] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [372] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [373] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [374] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[80],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [375] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [376] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[103],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [377] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[135],
+    /* matcher indices */ &kMatcherIndices[131],
   },
   {
     /* [378] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [379] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [380] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [381] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [382] */
-    /* usage */ ParameterUsage::kSampleIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [383] */
@@ -3768,88 +3768,88 @@
   },
   {
     /* [386] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[148],
   },
   {
     /* [387] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [388] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kSampleIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [389] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [390] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [391] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [392] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [393] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [394] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [395] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [396] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [397] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [398] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [399] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [400] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [401] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [402] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [403] */
@@ -3858,68 +3858,68 @@
   },
   {
     /* [404] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [405] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [406] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [407] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[107],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [408] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [409] */
-    /* usage */ ParameterUsage::kSampleIndex,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [410] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[111],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [411] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [412] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [413] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[119],
   },
   {
     /* [414] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [415] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kSampleIndex,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [416] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [417] */
@@ -3929,67 +3929,67 @@
   {
     /* [418] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [419] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
+    /* matcher indices */ &kMatcherIndices[145],
   },
   {
     /* [420] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [421] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [422] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[0],
+    /* matcher indices */ &kMatcherIndices[107],
   },
   {
     /* [423] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [424] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [425] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[103],
   },
   {
     /* [426] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [427] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [428] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[80],
   },
   {
     /* [429] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[95],
   },
   {
     /* [430] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[101],
   },
   {
     /* [431] */
@@ -3999,107 +3999,107 @@
   {
     /* [432] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [433] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [434] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[53],
+    /* matcher indices */ &kMatcherIndices[127],
   },
   {
     /* [435] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [436] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [437] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[56],
+    /* matcher indices */ &kMatcherIndices[150],
   },
   {
     /* [438] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [439] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[119],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [440] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[133],
+    /* matcher indices */ &kMatcherIndices[89],
   },
   {
     /* [441] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [442] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[101],
   },
   {
     /* [443] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[141],
   },
   {
     /* [444] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* usage */ ParameterUsage::kSampler,
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [445] */
-    /* usage */ ParameterUsage::kNone,
+    /* usage */ ParameterUsage::kCoords,
     /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [446] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[59],
+    /* matcher indices */ &kMatcherIndices[62],
   },
   {
     /* [447] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [448] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[121],
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [449] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[141],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [450] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [451] */
-    /* usage */ ParameterUsage::kCoords,
+    /* usage */ ParameterUsage::kNone,
     /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [452] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[65],
+    /* matcher indices */ &kMatcherIndices[0],
   },
   {
     /* [453] */
@@ -4109,102 +4109,102 @@
   {
     /* [454] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[121],
+    /* matcher indices */ &kMatcherIndices[97],
   },
   {
     /* [455] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[150],
+    /* matcher indices */ &kMatcherIndices[139],
   },
   {
     /* [456] */
     /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* matcher indices */ &kMatcherIndices[143],
   },
   {
     /* [457] */
     /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [458] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[77],
   },
   {
     /* [459] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [460] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[97],
   },
   {
     /* [461] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[65],
   },
   {
     /* [462] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [463] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [464] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [465] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [466] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [467] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[71],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [468] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[109],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [469] */
-    /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[103],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [470] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[139],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [471] */
-    /* usage */ ParameterUsage::kSampler,
-    /* matcher indices */ &kMatcherIndices[144],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [472] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [473] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[77],
+    /* matcher indices */ &kMatcherIndices[71],
   },
   {
     /* [474] */
@@ -4214,22 +4214,22 @@
   {
     /* [475] */
     /* usage */ ParameterUsage::kValue,
-    /* matcher indices */ &kMatcherIndices[103],
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [476] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[92],
   },
   {
     /* [477] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [478] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* usage */ ParameterUsage::kValue,
+    /* matcher indices */ &kMatcherIndices[101],
   },
   {
     /* [479] */
@@ -4239,7 +4239,7 @@
   {
     /* [480] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[47],
+    /* matcher indices */ &kMatcherIndices[59],
   },
   {
     /* [481] */
@@ -4254,22 +4254,22 @@
   {
     /* [483] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [484] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [485] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [486] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [487] */
@@ -4293,63 +4293,63 @@
   },
   {
     /* [491] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
+  },
+  {
+    /* [492] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
+  },
+  {
+    /* [493] */
     /* usage */ ParameterUsage::kTexture,
     /* matcher indices */ &kMatcherIndices[150],
   },
   {
-    /* [492] */
-    /* usage */ ParameterUsage::kCoords,
-    /* matcher indices */ &kMatcherIndices[95],
-  },
-  {
-    /* [493] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[2],
-  },
-  {
     /* [494] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* usage */ ParameterUsage::kCoords,
+    /* matcher indices */ &kMatcherIndices[99],
   },
   {
     /* [495] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[2],
   },
   {
     /* [496] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [497] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[2],
   },
   {
     /* [498] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [499] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[2],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [500] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [501] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[2],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [502] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [503] */
@@ -4364,12 +4364,12 @@
   {
     /* [505] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[2],
   },
   {
     /* [506] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [507] */
@@ -4379,17 +4379,17 @@
   {
     /* [508] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [509] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[2],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [510] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[56],
   },
   {
     /* [511] */
@@ -4434,7 +4434,7 @@
   {
     /* [519] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[2],
   },
   {
     /* [520] */
@@ -4444,12 +4444,12 @@
   {
     /* [521] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [522] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [523] */
@@ -4459,37 +4459,37 @@
   {
     /* [524] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [525] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [526] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [527] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [528] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [529] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [530] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [531] */
@@ -4504,12 +4504,12 @@
   {
     /* [533] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[115],
+    /* matcher indices */ &kMatcherIndices[103],
   },
   {
     /* [534] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [535] */
@@ -4524,12 +4524,12 @@
   {
     /* [537] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
+    /* matcher indices */ &kMatcherIndices[107],
   },
   {
     /* [538] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [539] */
@@ -4549,7 +4549,7 @@
   {
     /* [542] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [543] */
@@ -4564,32 +4564,32 @@
   {
     /* [545] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
+    /* matcher indices */ &kMatcherIndices[117],
   },
   {
     /* [546] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [547] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [548] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [549] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
+    /* matcher indices */ &kMatcherIndices[125],
   },
   {
     /* [550] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [551] */
@@ -4603,73 +4603,73 @@
   },
   {
     /* [553] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[129],
   },
   {
     /* [554] */
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
+  },
+  {
+    /* [555] */
     /* usage */ ParameterUsage::kNone,
     /* matcher indices */ &kMatcherIndices[38],
   },
   {
-    /* [555] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
-  },
-  {
     /* [556] */
-    /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [557] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [558] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [559] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
+    /* matcher indices */ &kMatcherIndices[147],
   },
   {
     /* [560] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [561] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [562] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [563] */
     /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
+    /* matcher indices */ &kMatcherIndices[144],
   },
   {
     /* [564] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [565] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [566] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [567] */
@@ -4679,37 +4679,37 @@
   {
     /* [568] */
     /* usage */ ParameterUsage::kLevel,
-    /* matcher indices */ &kMatcherIndices[46],
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [569] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [570] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [571] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[146],
   },
   {
     /* [572] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* usage */ ParameterUsage::kLevel,
+    /* matcher indices */ &kMatcherIndices[58],
   },
   {
     /* [573] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[41],
+    /* matcher indices */ &kMatcherIndices[47],
   },
   {
     /* [574] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[16],
   },
   {
     /* [575] */
@@ -4719,27 +4719,27 @@
   {
     /* [576] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[16],
+    /* matcher indices */ &kMatcherIndices[20],
   },
   {
     /* [577] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [578] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [579] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [580] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [581] */
@@ -4814,172 +4814,172 @@
   {
     /* [595] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [596] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [597] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [598] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [599] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [600] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [601] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [602] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [603] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [604] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [605] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [606] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [607] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [608] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[97],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [609] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [610] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [611] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [612] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[121],
   },
   {
     /* [613] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [614] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [615] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [616] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [617] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [618] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [619] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [620] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [621] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [622] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [623] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [624] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [625] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [626] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [627] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [628] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [629] */
@@ -4994,42 +4994,42 @@
   {
     /* [631] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [632] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [633] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [634] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [635] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [636] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [637] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [638] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [639] */
@@ -5109,7 +5109,7 @@
   {
     /* [654] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [655] */
@@ -5119,7 +5119,7 @@
   {
     /* [656] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[47],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [657] */
@@ -5129,17 +5129,17 @@
   {
     /* [658] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [659] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [660] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[44],
+    /* matcher indices */ &kMatcherIndices[59],
   },
   {
     /* [661] */
@@ -5149,232 +5149,232 @@
   {
     /* [662] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [663] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
-  },
-  {
-    /* [664] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[107],
-  },
-  {
-    /* [665] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
-  },
-  {
-    /* [666] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
-  },
-  {
-    /* [667] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
-  },
-  {
-    /* [668] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
-  },
-  {
-    /* [669] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
-  },
-  {
-    /* [670] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
-  },
-  {
-    /* [671] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[111],
-  },
-  {
-    /* [672] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
-  },
-  {
-    /* [673] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[115],
-  },
-  {
-    /* [674] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
-  },
-  {
-    /* [675] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
-  },
-  {
-    /* [676] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[83],
-  },
-  {
-    /* [677] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
-  },
-  {
-    /* [678] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
-  },
-  {
-    /* [679] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
-  },
-  {
-    /* [680] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
-  },
-  {
-    /* [681] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[150],
-  },
-  {
-    /* [682] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[86],
-  },
-  {
-    /* [683] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[83],
-  },
-  {
-    /* [684] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[89],
-  },
-  {
-    /* [685] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[92],
-  },
-  {
-    /* [686] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[148],
-  },
-  {
-    /* [687] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[145],
-  },
-  {
-    /* [688] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[143],
-  },
-  {
-    /* [689] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[146],
-  },
-  {
-    /* [690] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[147],
-  },
-  {
-    /* [691] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[107],
-  },
-  {
-    /* [692] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[129],
-  },
-  {
-    /* [693] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[127],
-  },
-  {
-    /* [694] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[111],
-  },
-  {
-    /* [695] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[113],
-  },
-  {
-    /* [696] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[115],
-  },
-  {
-    /* [697] */
-    /* usage */ ParameterUsage::kTexture,
-    /* matcher indices */ &kMatcherIndices[117],
-  },
-  {
-    /* [698] */
     /* usage */ ParameterUsage::kNone,
     /* matcher indices */ &kMatcherIndices[38],
   },
   {
-    /* [699] */
+    /* [664] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[38],
+  },
+  {
+    /* [665] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
+  },
+  {
+    /* [666] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[3],
+  },
+  {
+    /* [667] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[148],
+  },
+  {
+    /* [668] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[119],
+  },
+  {
+    /* [669] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[146],
+  },
+  {
+    /* [670] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[145],
+  },
+  {
+    /* [671] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[144],
+  },
+  {
+    /* [672] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[147],
+  },
+  {
+    /* [673] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[129],
+  },
+  {
+    /* [674] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[125],
+  },
+  {
+    /* [675] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[117],
+  },
+  {
+    /* [676] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[111],
+  },
+  {
+    /* [677] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[107],
+  },
+  {
+    /* [678] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[16],
+  },
+  {
+    /* [679] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[103],
+  },
+  {
+    /* [680] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[41],
+  },
+  {
+    /* [681] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[146],
+  },
+  {
+    /* [682] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[144],
+  },
+  {
+    /* [683] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[129],
+  },
+  {
+    /* [684] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[111],
+  },
+  {
+    /* [685] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[150],
+  },
+  {
+    /* [686] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[44],
+  },
+  {
+    /* [687] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[41],
+  },
+  {
+    /* [688] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[50],
+  },
+  {
+    /* [689] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[53],
+  },
+  {
+    /* [690] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[148],
+  },
+  {
+    /* [691] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[146],
+  },
+  {
+    /* [692] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[145],
+  },
+  {
+    /* [693] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[144],
+  },
+  {
+    /* [694] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[147],
+  },
+  {
+    /* [695] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[119],
+  },
+  {
+    /* [696] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[129],
+  },
+  {
+    /* [697] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[125],
+  },
+  {
+    /* [698] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[117],
+  },
+  {
+    /* [699] */
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[111],
   },
   {
     /* [700] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[107],
   },
   {
     /* [701] */
-    /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* usage */ ParameterUsage::kTexture,
+    /* matcher indices */ &kMatcherIndices[103],
   },
   {
     /* [702] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [703] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[49],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [704] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [705] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[20],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [706] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [707] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[1],
   },
   {
     /* [708] */
@@ -5389,22 +5389,22 @@
   {
     /* [710] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [711] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [712] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [713] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [714] */
@@ -5444,12 +5444,12 @@
   {
     /* [721] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [722] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [723] */
@@ -5464,47 +5464,47 @@
   {
     /* [725] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[103],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [726] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[103],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [727] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [728] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [729] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[123],
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [730] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[109],
   },
   {
     /* [731] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [732] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [733] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[113],
   },
   {
     /* [734] */
@@ -5514,32 +5514,32 @@
   {
     /* [735] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [736] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[2],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [737] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [738] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [739] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [740] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[2],
   },
   {
     /* [741] */
@@ -5574,52 +5574,52 @@
   {
     /* [747] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [748] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [749] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [750] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [751] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[18],
   },
   {
     /* [752] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [753] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [754] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [755] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [756] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [757] */
@@ -5644,42 +5644,42 @@
   {
     /* [761] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [762] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [763] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [764] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [765] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [766] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [767] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [768] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [769] */
@@ -5699,32 +5699,32 @@
   {
     /* [772] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [773] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [774] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [775] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [776] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [777] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [778] */
@@ -5739,37 +5739,37 @@
   {
     /* [780] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[12],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [781] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [782] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [783] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [784] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[12],
   },
   {
     /* [785] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[38],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [786] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[3],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [787] */
@@ -5784,22 +5784,22 @@
   {
     /* [789] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [790] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [791] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[38],
   },
   {
     /* [792] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[15],
+    /* matcher indices */ &kMatcherIndices[3],
   },
   {
     /* [793] */
@@ -5834,36 +5834,56 @@
   {
     /* [799] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[7],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [800] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [801] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[32],
   },
   {
     /* [802] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[35],
+    /* matcher indices */ &kMatcherIndices[15],
   },
   {
     /* [803] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[17],
+    /* matcher indices */ &kMatcherIndices[7],
   },
   {
     /* [804] */
     /* usage */ ParameterUsage::kNone,
-    /* matcher indices */ &kMatcherIndices[32],
+    /* matcher indices */ &kMatcherIndices[35],
   },
   {
     /* [805] */
     /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[18],
+  },
+  {
+    /* [806] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[35],
+  },
+  {
+    /* [807] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[18],
+  },
+  {
+    /* [808] */
+    /* usage */ ParameterUsage::kNone,
+    /* matcher indices */ &kMatcherIndices[32],
+  },
+  {
+    /* [809] */
+    /* usage */ ParameterUsage::kNone,
     /* matcher indices */ &kMatcherIndices[15],
   },
 };
@@ -5957,8 +5977,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[697],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[701],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -5969,8 +5989,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[529],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[533],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -5981,8 +6001,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[696],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[700],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -5993,8 +6013,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[533],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[537],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6005,8 +6025,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[695],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[699],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6017,8 +6037,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[537],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[541],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6029,37 +6049,13 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[694],
-    /* return matcher indices */ &kMatcherIndices[109],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [7] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[541],
-    /* return matcher indices */ &kMatcherIndices[109],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [8] */
-    /* num parameters */ 1,
-    /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[693],
+    /* parameters */ &kParameters[698],
     /* return matcher indices */ &kMatcherIndices[95],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [9] */
+    /* [7] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 0,
@@ -6071,14 +6067,38 @@
     /* is_deprecated */ false,
   },
   {
+    /* [8] */
+    /* num parameters */ 1,
+    /* num open types */ 1,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[697],
+    /* return matcher indices */ &kMatcherIndices[99],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [9] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[549],
+    /* return matcher indices */ &kMatcherIndices[99],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
     /* [10] */
     /* num parameters */ 1,
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[692],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[696],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6089,8 +6109,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[549],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[553],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6101,8 +6121,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[691],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[695],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6113,8 +6133,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[690],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[694],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6125,8 +6145,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[555],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[559],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6137,8 +6157,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[689],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[693],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6149,8 +6169,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[559],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[563],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6161,8 +6181,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[688],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[692],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6173,8 +6193,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[563],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[567],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6185,8 +6205,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[687],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[691],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6197,8 +6217,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[567],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[571],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6209,8 +6229,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[686],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[690],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6221,8 +6241,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[3],
-    /* parameters */ &kParameters[685],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[689],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6233,8 +6253,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[3],
-    /* parameters */ &kParameters[684],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[688],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6245,8 +6265,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[3],
-    /* parameters */ &kParameters[683],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[687],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6257,8 +6277,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[3],
-    /* parameters */ &kParameters[682],
-    /* return matcher indices */ &kMatcherIndices[109],
+    /* parameters */ &kParameters[686],
+    /* return matcher indices */ &kMatcherIndices[95],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6269,81 +6289,81 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[681],
-    /* return matcher indices */ &kMatcherIndices[95],
+    /* parameters */ &kParameters[685],
+    /* return matcher indices */ &kMatcherIndices[99],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [27] */
-    /* num parameters */ 3,
+    /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[449],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[326],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [28] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[470],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [29] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[334],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [30] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[338],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [31] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[148],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[183],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [32] */
-    /* num parameters */ 3,
+    /* [29] */
+    /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[377],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[193],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [30] */
+    /* num parameters */ 6,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[19],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [31] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[342],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [32] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[213],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -6353,21 +6373,21 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[314],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[278],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [34] */
-    /* num parameters */ 3,
+    /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[440],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[108],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -6377,193 +6397,13 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[310],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[274],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [36] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[431],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [37] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[306],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [38] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[302],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [39] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[98],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [40] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[425],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [41] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[294],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [42] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[322],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [43] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[183],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [44] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[193],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [45] */
-    /* num parameters */ 6,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[7],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [46] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[270],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [47] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[78],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [48] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[278],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [49] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[213],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [50] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[266],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [51] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -6575,7 +6415,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [52] */
+    /* [37] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -6587,7 +6427,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [53] */
+    /* [38] */
     /* num parameters */ 6,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -6599,19 +6439,19 @@
     /* is_deprecated */ false,
   },
   {
-    /* [54] */
+    /* [39] */
     /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[250],
+    /* parameters */ &kParameters[282],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [55] */
+    /* [40] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -6623,163 +6463,199 @@
     /* is_deprecated */ false,
   },
   {
-    /* [56] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[455],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [57] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[374],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [58] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[473],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [59] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[326],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [60] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[467],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [61] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[359],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [62] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[452],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [63] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[318],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [64] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[446],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [65] */
+    /* [41] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[437],
-    /* return matcher indices */ nullptr,
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [66] */
+    /* [42] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[443],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [43] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[455],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [44] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[330],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [45] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[334],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [46] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[148],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [47] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[377],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [48] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[318],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [49] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[434],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
-    /* [67] */
+    /* [50] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[314],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [51] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[431],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [52] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[302],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [53] */
     /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[298],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
-    /* [68] */
+    /* [54] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[78],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [55] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[422],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* parameters */ &kParameters[419],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
-    /* [69] */
+    /* [56] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[290],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [57] */
     /* num parameters */ 4,
     /* num open types */ 1,
     /* num open numbers */ 0,
@@ -6791,7 +6667,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [70] */
+    /* [58] */
     /* num parameters */ 5,
     /* num open types */ 1,
     /* num open numbers */ 0,
@@ -6803,7 +6679,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [71] */
+    /* [59] */
     /* num parameters */ 5,
     /* num open types */ 1,
     /* num open numbers */ 0,
@@ -6815,19 +6691,19 @@
     /* is_deprecated */ false,
   },
   {
-    /* [72] */
+    /* [60] */
     /* num parameters */ 6,
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[55],
+    /* parameters */ &kParameters[49],
     /* return matcher indices */ &kMatcherIndices[105],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [73] */
+    /* [61] */
     /* num parameters */ 4,
     /* num open types */ 1,
     /* num open numbers */ 0,
@@ -6839,7 +6715,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [74] */
+    /* [62] */
     /* num parameters */ 5,
     /* num open types */ 1,
     /* num open numbers */ 0,
@@ -6851,74 +6727,218 @@
     /* is_deprecated */ false,
   },
   {
-    /* [75] */
-    /* num parameters */ 3,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[368],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [76] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[226],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [77] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[230],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [78] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[178],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [79] */
+    /* [63] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[371],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [80] */
+    /* [64] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[226],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [65] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[230],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [66] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[178],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [67] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[374],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [68] */
     /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[234],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [69] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[446],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [70] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[461],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [71] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[250],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [72] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[473],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [73] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[350],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [74] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[458],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [75] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[322],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [76] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[452],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [77] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[476],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [78] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[440],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [79] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[306],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [80] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[428],
+    /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6929,8 +6949,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[674],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[679],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6941,8 +6961,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[673],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[677],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6953,8 +6973,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[672],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[676],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6965,8 +6985,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[671],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[675],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6977,8 +6997,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[670],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[674],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -6989,8 +7009,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[669],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[673],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7001,8 +7021,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[668],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[672],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7013,8 +7033,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[667],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[671],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7025,8 +7045,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[666],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[670],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7037,8 +7057,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[665],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[669],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7049,7 +7069,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[661],
+    /* parameters */ &kParameters[665],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7073,7 +7093,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[557],
+    /* parameters */ &kParameters[555],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7085,7 +7105,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[561],
+    /* parameters */ &kParameters[557],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7097,8 +7117,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[565],
-    /* return matcher indices */ &kMatcherIndices[20],
+    /* parameters */ &kParameters[561],
+    /* return matcher indices */ &kMatcherIndices[16],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7109,8 +7129,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[569],
-    /* return matcher indices */ &kMatcherIndices[20],
+    /* parameters */ &kParameters[565],
+    /* return matcher indices */ &kMatcherIndices[16],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7121,8 +7141,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[1],
-    /* parameters */ &kParameters[571],
-    /* return matcher indices */ &kMatcherIndices[41],
+    /* parameters */ &kParameters[569],
+    /* return matcher indices */ &kMatcherIndices[47],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7157,7 +7177,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[419],
+    /* parameters */ &kParameters[425],
     /* return matcher indices */ &kMatcherIndices[105],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7169,7 +7189,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[416],
+    /* parameters */ &kParameters[422],
     /* return matcher indices */ &kMatcherIndices[105],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7181,7 +7201,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[290],
+    /* parameters */ &kParameters[294],
     /* return matcher indices */ &kMatcherIndices[105],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7193,7 +7213,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[410],
+    /* parameters */ &kParameters[416],
     /* return matcher indices */ &kMatcherIndices[105],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7205,7 +7225,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[407],
+    /* parameters */ &kParameters[413],
     /* return matcher indices */ &kMatcherIndices[105],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7217,7 +7237,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[404],
+    /* parameters */ &kParameters[410],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7241,7 +7261,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[380],
+    /* parameters */ &kParameters[386],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7253,8 +7273,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[491],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[493],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7265,8 +7285,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[108],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7277,8 +7297,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[19],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[67],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7289,8 +7309,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[67],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[7],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7302,7 +7322,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[0],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7313,8 +7333,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[113],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[93],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7326,7 +7346,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[43],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7337,8 +7357,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[153],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[143],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7350,7 +7370,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[25],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7362,7 +7382,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[346],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7374,7 +7394,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[88],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7385,8 +7405,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[93],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[113],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7397,8 +7417,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[61],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[55],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7409,8 +7429,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[282],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[270],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7422,7 +7442,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[73],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7433,8 +7453,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[274],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[266],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7446,7 +7466,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[123],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
@@ -7457,7 +7477,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[4],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[751],
+    /* parameters */ &kParameters[755],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7469,7 +7489,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[4],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[752],
+    /* parameters */ &kParameters[756],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7481,7 +7501,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[519],
+    /* parameters */ &kParameters[521],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7493,7 +7513,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[521],
+    /* parameters */ &kParameters[523],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7505,7 +7525,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[523],
+    /* parameters */ &kParameters[525],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7517,7 +7537,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[525],
+    /* parameters */ &kParameters[527],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7529,8 +7549,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[527],
-    /* return matcher indices */ &kMatcherIndices[20],
+    /* parameters */ &kParameters[529],
+    /* return matcher indices */ &kMatcherIndices[16],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7541,97 +7561,25 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[242],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [133] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[158],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [134] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[83],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [135] */
-    /* num parameters */ 6,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[37],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [136] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[254],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [137] */
-    /* num parameters */ 5,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[133],
-    /* return matcher indices */ &kMatcherIndices[103],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [138] */
-    /* num parameters */ 4,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[246],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [139] */
+    /* [133] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[143],
+    /* parameters */ &kParameters[153],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [140] */
+    /* [134] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7643,19 +7591,19 @@
     /* is_deprecated */ false,
   },
   {
-    /* [141] */
+    /* [135] */
     /* num parameters */ 6,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[49],
+    /* parameters */ &kParameters[37],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [142] */
+    /* [136] */
     /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7667,7 +7615,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [143] */
+    /* [137] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7679,7 +7627,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [144] */
+    /* [138] */
     /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7691,7 +7639,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [145] */
+    /* [139] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7703,19 +7651,19 @@
     /* is_deprecated */ false,
   },
   {
-    /* [146] */
+    /* [140] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[103],
+    /* parameters */ &kParameters[98],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
-    /* [147] */
+    /* [141] */
     /* num parameters */ 6,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7727,7 +7675,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [148] */
+    /* [142] */
     /* num parameters */ 4,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7739,7 +7687,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [149] */
+    /* [143] */
     /* num parameters */ 5,
     /* num open types */ 0,
     /* num open numbers */ 0,
@@ -7751,6 +7699,78 @@
     /* is_deprecated */ false,
   },
   {
+    /* [144] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[242],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [145] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[158],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [146] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[83],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [147] */
+    /* num parameters */ 6,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[61],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [148] */
+    /* num parameters */ 4,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[254],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [149] */
+    /* num parameters */ 5,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[133],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
     /* [150] */
     /* num parameters */ 2,
     /* num open types */ 1,
@@ -7806,7 +7826,7 @@
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
     /* parameters */ &kParameters[547],
-    /* return matcher indices */ &kMatcherIndices[20],
+    /* return matcher indices */ &kMatcherIndices[16],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7817,8 +7837,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[680],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[684],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7829,8 +7849,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[679],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[683],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7841,8 +7861,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[678],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[682],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7853,8 +7873,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[677],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[681],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7865,8 +7885,8 @@
     /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[3],
-    /* parameters */ &kParameters[676],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[680],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7877,61 +7897,13 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[579],
-    /* return matcher indices */ &kMatcherIndices[3],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [161] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[581],
-    /* return matcher indices */ &kMatcherIndices[38],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [162] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[583],
-    /* return matcher indices */ &kMatcherIndices[38],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [163] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[585],
-    /* return matcher indices */ &kMatcherIndices[38],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [164] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[587],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [165] */
+    /* [161] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
@@ -7943,7 +7915,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [166] */
+    /* [162] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
@@ -7955,7 +7927,7 @@
     /* is_deprecated */ false,
   },
   {
-    /* [167] */
+    /* [163] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
@@ -7967,14 +7939,62 @@
     /* is_deprecated */ false,
   },
   {
+    /* [164] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[609],
+    /* return matcher indices */ &kMatcherIndices[18],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [165] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[613],
+    /* return matcher indices */ &kMatcherIndices[35],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [166] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[1],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[615],
+    /* return matcher indices */ &kMatcherIndices[3],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [167] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[1],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[663],
+    /* return matcher indices */ &kMatcherIndices[38],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
     /* [168] */
     /* num parameters */ 2,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[605],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[617],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -7985,7 +8005,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[609],
+    /* parameters */ &kParameters[619],
     /* return matcher indices */ &kMatcherIndices[35],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -7997,7 +8017,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[611],
+    /* parameters */ &kParameters[621],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -8009,7 +8029,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[553],
+    /* parameters */ &kParameters[623],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -8017,24 +8037,24 @@
   {
     /* [172] */
     /* num parameters */ 2,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[613],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[577],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [173] */
     /* num parameters */ 2,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[615],
-    /* return matcher indices */ &kMatcherIndices[35],
+    /* parameters */ &kParameters[579],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8042,11 +8062,11 @@
     /* [174] */
     /* num parameters */ 2,
     /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[617],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[583],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8055,9 +8075,9 @@
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[619],
+    /* parameters */ &kParameters[585],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -8065,96 +8085,96 @@
   {
     /* [176] */
     /* num parameters */ 3,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[3],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[458],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[401],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [177] */
     /* num parameters */ 3,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[3],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[461],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[404],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [178] */
     /* num parameters */ 3,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[3],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[464],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[407],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [179] */
     /* num parameters */ 3,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[395],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[464],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [180] */
     /* num parameters */ 3,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[398],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[467],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [181] */
     /* num parameters */ 3,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[401],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[470],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [182] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[735],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[766],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [183] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[734],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[765],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8165,7 +8185,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[773],
+    /* parameters */ &kParameters[781],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8177,7 +8197,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[772],
+    /* parameters */ &kParameters[780],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8189,7 +8209,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[805],
+    /* parameters */ &kParameters[779],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8201,7 +8221,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[771],
+    /* parameters */ &kParameters[778],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8213,7 +8233,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[770],
+    /* parameters */ &kParameters[809],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8225,7 +8245,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[769],
+    /* parameters */ &kParameters[777],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8237,9 +8257,9 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[768],
+    /* parameters */ &kParameters[776],
     /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
@@ -8249,9 +8269,9 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[767],
+    /* parameters */ &kParameters[775],
     /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
@@ -8261,9 +8281,9 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[766],
+    /* parameters */ &kParameters[774],
     /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
@@ -8273,56 +8293,56 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[765],
+    /* parameters */ &kParameters[773],
     /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
     /* [194] */
-    /* num parameters */ 3,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[476],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[772],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [195] */
-    /* num parameters */ 3,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[365],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[771],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [196] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[641],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[770],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [197] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[643],
-    /* return matcher indices */ &kMatcherIndices[35],
+    /* parameters */ &kParameters[769],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8331,10 +8351,10 @@
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[637],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[633],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8343,7 +8363,7 @@
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[6],
     /* parameters */ &kParameters[639],
     /* return matcher indices */ &kMatcherIndices[35],
@@ -8352,74 +8372,74 @@
   },
   {
     /* [200] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[762],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[629],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [201] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[3],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[761],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[631],
+    /* return matcher indices */ &kMatcherIndices[35],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [202] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[760],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[768],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [203] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[759],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[767],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [204] */
-    /* num parameters */ 3,
+    /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[356],
+    /* parameters */ &kParameters[783],
     /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
     /* [205] */
-    /* num parameters */ 3,
+    /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[353],
+    /* parameters */ &kParameters[782],
     /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
@@ -8429,7 +8449,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[758],
+    /* parameters */ &kParameters[764],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -8441,32 +8461,32 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[757],
+    /* parameters */ &kParameters[763],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [208] */
-    /* num parameters */ 1,
+    /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[756],
-    /* return matcher indices */ &kMatcherIndices[152],
+    /* parameters */ &kParameters[359],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [209] */
-    /* num parameters */ 1,
+    /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[755],
-    /* return matcher indices */ &kMatcherIndices[99],
+    /* parameters */ &kParameters[356],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8477,9 +8497,9 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[754],
+    /* parameters */ &kParameters[762],
     /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -8489,9 +8509,9 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[753],
+    /* parameters */ &kParameters[761],
     /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -8501,9 +8521,9 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[746],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[760],
+    /* return matcher indices */ &kMatcherIndices[152],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -8513,9 +8533,9 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[745],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[759],
+    /* return matcher indices */ &kMatcherIndices[137],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -8525,7 +8545,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[744],
+    /* parameters */ &kParameters[758],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
@@ -8537,33 +8557,33 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[743],
+    /* parameters */ &kParameters[757],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
     /* [216] */
-    /* num parameters */ 4,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[342],
-    /* return matcher indices */ &kMatcherIndices[3],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* parameters */ &kParameters[750],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
     /* [217] */
-    /* num parameters */ 4,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[330],
-    /* return matcher indices */ &kMatcherIndices[38],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* parameters */ &kParameters[749],
+    /* return matcher indices */ &kMatcherIndices[32],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
@@ -8573,9 +8593,9 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[742],
+    /* parameters */ &kParameters[748],
     /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
@@ -8585,32 +8605,32 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[741],
+    /* parameters */ &kParameters[747],
     /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
     /* is_deprecated */ false,
   },
   {
     /* [220] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
+    /* num parameters */ 4,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[507],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[338],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [221] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
+    /* num parameters */ 4,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[659],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[310],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -8621,7 +8641,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[740],
+    /* parameters */ &kParameters[746],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -8633,241 +8653,145 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[739],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[745],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [224] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[738],
+    /* parameters */ &kParameters[507],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [225] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[737],
+    /* parameters */ &kParameters[509],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [226] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[775],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [227] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[774],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [228] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[489],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[641],
+    /* return matcher indices */ &kMatcherIndices[18],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [227] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[643],
+    /* return matcher indices */ &kMatcherIndices[35],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [228] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[742],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [229] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[487],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[741],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [230] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[485],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[739],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [231] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
+    /* num parameters */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[577],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[738],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [232] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num parameters */ 2,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[777],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[491],
+    /* return matcher indices */ &kMatcherIndices[3],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [233] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num parameters */ 2,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[776],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
+    /* parameters */ &kParameters[581],
+    /* return matcher indices */ &kMatcherIndices[38],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [234] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[732],
-    /* return matcher indices */ &kMatcherIndices[151],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [235] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[731],
-    /* return matcher indices */ &kMatcherIndices[125],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [236] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[3],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[629],
-    /* return matcher indices */ &kMatcherIndices[17],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [237] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[3],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[635],
-    /* return matcher indices */ &kMatcherIndices[35],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [238] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[3],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[625],
-    /* return matcher indices */ &kMatcherIndices[17],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [239] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[3],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[627],
-    /* return matcher indices */ &kMatcherIndices[35],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [240] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[779],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [241] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[778],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [242] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[645],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [243] */
+    /* [235] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
@@ -8879,115 +8803,19 @@
     /* is_deprecated */ false,
   },
   {
-    /* [244] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[601],
-    /* return matcher indices */ &kMatcherIndices[3],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [245] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[603],
-    /* return matcher indices */ &kMatcherIndices[38],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [246] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[599],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [247] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[597],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [248] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[483],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [249] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[481],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [250] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[724],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [251] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[723],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [252] */
+    /* [236] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[649],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [253] */
+    /* [237] */
     /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
@@ -8999,13 +8827,205 @@
     /* is_deprecated */ false,
   },
   {
+    /* [238] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[736],
+    /* return matcher indices */ &kMatcherIndices[151],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [239] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[735],
+    /* return matcher indices */ &kMatcherIndices[115],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [240] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[603],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [241] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[601],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [242] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[653],
+    /* return matcher indices */ &kMatcherIndices[18],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [243] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[655],
+    /* return matcher indices */ &kMatcherIndices[35],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [244] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[1],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[605],
+    /* return matcher indices */ &kMatcherIndices[3],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [245] */
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[1],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[607],
+    /* return matcher indices */ &kMatcherIndices[38],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [246] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[786],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [247] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[785],
+    /* return matcher indices */ &kMatcherIndices[32],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [248] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[744],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [249] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[743],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [250] */
+    /* num parameters */ 1,
+    /* num open types */ 1,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[737],
+    /* return matcher indices */ &kMatcherIndices[3],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [251] */
+    /* num parameters */ 1,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[702],
+    /* return matcher indices */ &kMatcherIndices[38],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [252] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[485],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [253] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[483],
+    /* return matcher indices */ &kMatcherIndices[32],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
     /* [254] */
     /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[782],
+    /* parameters */ &kParameters[728],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9017,7 +9037,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[781],
+    /* parameters */ &kParameters[727],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9029,7 +9049,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[722],
+    /* parameters */ &kParameters[788],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9041,7 +9061,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[721],
+    /* parameters */ &kParameters[787],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9049,24 +9069,24 @@
   {
     /* [258] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[720],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[790],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [259] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[719],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[789],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9075,9 +9095,9 @@
     /* num parameters */ 1,
     /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[733],
+    /* parameters */ &kParameters[726],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9087,9 +9107,9 @@
     /* num parameters */ 1,
     /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[698],
+    /* parameters */ &kParameters[725],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9101,7 +9121,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[718],
+    /* parameters */ &kParameters[724],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9113,32 +9133,32 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[717],
+    /* parameters */ &kParameters[723],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [264] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num parameters */ 2,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[716],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[489],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [265] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num parameters */ 2,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[715],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[487],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9149,7 +9169,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[714],
+    /* parameters */ &kParameters[722],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9161,49 +9181,97 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[713],
+    /* parameters */ &kParameters[721],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [268] */
-    /* num parameters */ 3,
+    /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[428],
+    /* parameters */ &kParameters[720],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [269] */
-    /* num parameters */ 3,
+    /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[389],
+    /* parameters */ &kParameters[719],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [270] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[718],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [271] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[717],
+    /* return matcher indices */ &kMatcherIndices[32],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [272] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[386],
+    /* parameters */ &kParameters[398],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [273] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[395],
+    /* return matcher indices */ &kMatcherIndices[32],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [274] */
+    /* num parameters */ 3,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[389],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ true,
   },
   {
-    /* [271] */
+    /* [275] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 1,
@@ -9215,97 +9283,49 @@
     /* is_deprecated */ true,
   },
   {
-    /* [272] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[712],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [273] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[711],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [274] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[495],
-    /* return matcher indices */ &kMatcherIndices[15],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [275] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[497],
-    /* return matcher indices */ &kMatcherIndices[32],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
     /* [276] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[784],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[716],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [277] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[783],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[715],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [278] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[709],
+    /* parameters */ &kParameters[499],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [279] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[708],
+    /* parameters */ &kParameters[501],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9313,48 +9333,48 @@
   {
     /* [280] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[707],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[753],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [281] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[706],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* parameters */ &kParameters[754],
+    /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [282] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[786],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[713],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [283] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[785],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[712],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9365,7 +9385,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[675],
+    /* parameters */ &kParameters[711],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9377,7 +9397,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[704],
+    /* parameters */ &kParameters[710],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9385,24 +9405,24 @@
   {
     /* [286] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[749],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[751],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [287] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[750],
-    /* return matcher indices */ &kMatcherIndices[38],
+    /* parameters */ &kParameters[752],
+    /* return matcher indices */ &kMatcherIndices[35],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9413,8 +9433,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[747],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[709],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9425,8 +9445,8 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[748],
-    /* return matcher indices */ &kMatcherIndices[35],
+    /* parameters */ &kParameters[708],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9437,7 +9457,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[788],
+    /* parameters */ &kParameters[792],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9449,7 +9469,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[787],
+    /* parameters */ &kParameters[791],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9461,7 +9481,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[792],
+    /* parameters */ &kParameters[796],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9473,7 +9493,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[791],
+    /* parameters */ &kParameters[795],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9485,7 +9505,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[413],
+    /* parameters */ &kParameters[392],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9497,7 +9517,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[392],
+    /* parameters */ &kParameters[380],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9509,7 +9529,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[794],
+    /* parameters */ &kParameters[798],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9521,7 +9541,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[793],
+    /* parameters */ &kParameters[797],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9533,7 +9553,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[633],
+    /* parameters */ &kParameters[637],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9545,7 +9565,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[631],
+    /* parameters */ &kParameters[635],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9557,7 +9577,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[796],
+    /* parameters */ &kParameters[800],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9569,7 +9589,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[795],
+    /* parameters */ &kParameters[799],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9581,7 +9601,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[798],
+    /* parameters */ &kParameters[802],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9593,7 +9613,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[797],
+    /* parameters */ &kParameters[801],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9605,7 +9625,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[653],
+    /* parameters */ &kParameters[657],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9617,7 +9637,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[655],
+    /* parameters */ &kParameters[659],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9629,8 +9649,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[801],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[805],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9641,20 +9661,20 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[800],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[804],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [308] */
     /* num parameters */ 1,
-    /* num open types */ 1,
+    /* num open types */ 0,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[0],
+    /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[664],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* parameters */ &kParameters[807],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9662,11 +9682,11 @@
     /* [309] */
     /* num parameters */ 1,
     /* num open types */ 0,
-    /* num open numbers */ 0,
+    /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[663],
-    /* return matcher indices */ &kMatcherIndices[46],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[806],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9677,8 +9697,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[803],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[714],
+    /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9689,20 +9709,20 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[802],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[808],
+    /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [312] */
     /* num parameters */ 1,
-    /* num open types */ 0,
+    /* num open types */ 1,
     /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
+    /* open types */ &kOpenTypes[0],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[710],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* parameters */ &kParameters[668],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9710,11 +9730,11 @@
     /* [313] */
     /* num parameters */ 1,
     /* num open types */ 0,
-    /* num open numbers */ 1,
+    /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[804],
-    /* return matcher indices */ &kMatcherIndices[32],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[667],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9725,7 +9745,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[790],
+    /* parameters */ &kParameters[794],
     /* return matcher indices */ &kMatcherIndices[15],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9737,31 +9757,31 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[789],
+    /* parameters */ &kParameters[793],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [316] */
-    /* num parameters */ 1,
+    /* num parameters */ 3,
     /* num open types */ 1,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[764],
+    /* parameters */ &kParameters[368],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [317] */
-    /* num parameters */ 1,
+    /* num parameters */ 3,
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[763],
+    /* parameters */ &kParameters[365],
     /* return matcher indices */ &kMatcherIndices[38],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9773,7 +9793,7 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[657],
+    /* parameters */ &kParameters[661],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9792,14 +9812,14 @@
   },
   {
     /* [320] */
-    /* num parameters */ 1,
+    /* num parameters */ 0,
     /* num open types */ 0,
-    /* num open numbers */ 2,
+    /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[5],
-    /* parameters */ &kParameters[705],
-    /* return matcher indices */ &kMatcherIndices[16],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[810],
+    /* return matcher indices */ nullptr,
+    /* supported_stages */ PipelineStageSet(PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -9809,8 +9829,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[700],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* parameters */ &kParameters[704],
+    /* return matcher indices */ &kMatcherIndices[109],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9821,43 +9841,43 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[701],
-    /* return matcher indices */ &kMatcherIndices[123],
+    /* parameters */ &kParameters[705],
+    /* return matcher indices */ &kMatcherIndices[113],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [323] */
     /* num parameters */ 1,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[736],
-    /* return matcher indices */ &kMatcherIndices[3],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[706],
+    /* return matcher indices */ &kMatcherIndices[113],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [324] */
-    /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[1],
-    /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[493],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[707],
+    /* return matcher indices */ &kMatcherIndices[113],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [325] */
-    /* num parameters */ 2,
+    /* num parameters */ 1,
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[499],
+    /* parameters */ &kParameters[740],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9869,8 +9889,8 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[501],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* parameters */ &kParameters[495],
+    /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -9881,7 +9901,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[503],
+    /* parameters */ &kParameters[497],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9893,7 +9913,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[509],
+    /* parameters */ &kParameters[503],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9905,7 +9925,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[511],
+    /* parameters */ &kParameters[505],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9917,7 +9937,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[513],
+    /* parameters */ &kParameters[511],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9929,7 +9949,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[515],
+    /* parameters */ &kParameters[513],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -9941,69 +9961,69 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[517],
+    /* parameters */ &kParameters[515],
     /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [333] */
-    /* num parameters */ 3,
+    /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[1],
     /* open numbers */ &kOpenNumbers[9],
-    /* parameters */ &kParameters[350],
-    /* return matcher indices */ &kMatcherIndices[101],
+    /* parameters */ &kParameters[517],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [334] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[702],
-    /* return matcher indices */ &kMatcherIndices[123],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* num parameters */ 2,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[1],
+    /* open numbers */ &kOpenNumbers[9],
+    /* parameters */ &kParameters[519],
+    /* return matcher indices */ &kMatcherIndices[3],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [335] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[703],
-    /* return matcher indices */ &kMatcherIndices[123],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* num parameters */ 3,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[1],
+    /* open numbers */ &kOpenNumbers[9],
+    /* parameters */ &kParameters[353],
+    /* return matcher indices */ &kMatcherIndices[135],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [336] */
     /* num parameters */ 1,
     /* num open types */ 0,
-    /* num open numbers */ 0,
+    /* num open numbers */ 2,
     /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[699],
-    /* return matcher indices */ &kMatcherIndices[103],
+    /* open numbers */ &kOpenNumbers[5],
+    /* parameters */ &kParameters[678],
+    /* return matcher indices */ &kMatcherIndices[20],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [337] */
-    /* num parameters */ 0,
+    /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[806],
-    /* return matcher indices */ nullptr,
-    /* supported_stages */ PipelineStageSet(PipelineStage::kCompute),
+    /* parameters */ &kParameters[703],
+    /* return matcher indices */ &kMatcherIndices[109],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
@@ -10013,7 +10033,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[443],
+    /* parameters */ &kParameters[449],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -10025,7 +10045,7 @@
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[505],
+    /* parameters */ &kParameters[481],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -10037,8 +10057,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[725],
-    /* return matcher indices */ &kMatcherIndices[49],
+    /* parameters */ &kParameters[729],
+    /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -10049,8 +10069,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[726],
-    /* return matcher indices */ &kMatcherIndices[49],
+    /* parameters */ &kParameters[730],
+    /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -10061,8 +10081,8 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[727],
-    /* return matcher indices */ &kMatcherIndices[49],
+    /* parameters */ &kParameters[731],
+    /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
@@ -10073,73 +10093,61 @@
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[728],
-    /* return matcher indices */ &kMatcherIndices[49],
+    /* parameters */ &kParameters[732],
+    /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [344] */
-    /* num parameters */ 2,
+    /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[621],
-    /* return matcher indices */ &kMatcherIndices[17],
+    /* parameters */ &kParameters[733],
+    /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [345] */
-    /* num parameters */ 2,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[623],
-    /* return matcher indices */ &kMatcherIndices[17],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [346] */
-    /* num parameters */ 1,
-    /* num open types */ 0,
-    /* num open numbers */ 0,
-    /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[729],
-    /* return matcher indices */ &kMatcherIndices[49],
-    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
-    /* is_deprecated */ false,
-  },
-  {
-    /* [347] */
     /* num parameters */ 1,
     /* num open types */ 0,
     /* num open numbers */ 1,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[730],
+    /* parameters */ &kParameters[734],
     /* return matcher indices */ &kMatcherIndices[32],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [348] */
+    /* [346] */
     /* num parameters */ 2,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[607],
-    /* return matcher indices */ &kMatcherIndices[97],
+    /* parameters */ &kParameters[625],
+    /* return matcher indices */ &kMatcherIndices[18],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
-    /* [349] */
+    /* [347] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[627],
+    /* return matcher indices */ &kMatcherIndices[18],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [348] */
     /* num parameters */ 3,
     /* num open types */ 0,
     /* num open numbers */ 1,
@@ -10151,49 +10159,85 @@
     /* is_deprecated */ false,
   },
   {
+    /* [349] */
+    /* num parameters */ 2,
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[611],
+    /* return matcher indices */ &kMatcherIndices[121],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
     /* [350] */
     /* num parameters */ 2,
-    /* num open types */ 1,
-    /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[0],
-    /* open numbers */ &kOpenNumbers[6],
+    /* num open types */ 0,
+    /* num open numbers */ 0,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[10],
     /* parameters */ &kParameters[595],
-    /* return matcher indices */ &kMatcherIndices[3],
+    /* return matcher indices */ &kMatcherIndices[1],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [351] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 0,
-    /* num open numbers */ 1,
+    /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
-    /* open numbers */ &kOpenNumbers[6],
-    /* parameters */ &kParameters[780],
-    /* return matcher indices */ &kMatcherIndices[15],
+    /* open numbers */ &kOpenNumbers[10],
+    /* parameters */ &kParameters[597],
+    /* return matcher indices */ &kMatcherIndices[58],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [352] */
-    /* num parameters */ 1,
+    /* num parameters */ 2,
     /* num open types */ 1,
     /* num open numbers */ 1,
-    /* open types */ &kOpenTypes[2],
-    /* open numbers */ &kOpenNumbers[8],
-    /* parameters */ &kParameters[799],
-    /* return matcher indices */ &kMatcherIndices[49],
+    /* open types */ &kOpenTypes[0],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[599],
+    /* return matcher indices */ &kMatcherIndices[3],
     /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
     /* is_deprecated */ false,
   },
   {
     /* [353] */
+    /* num parameters */ 1,
+    /* num open types */ 0,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[5],
+    /* open numbers */ &kOpenNumbers[6],
+    /* parameters */ &kParameters[784],
+    /* return matcher indices */ &kMatcherIndices[15],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [354] */
+    /* num parameters */ 1,
+    /* num open types */ 1,
+    /* num open numbers */ 1,
+    /* open types */ &kOpenTypes[2],
+    /* open numbers */ &kOpenNumbers[8],
+    /* parameters */ &kParameters[803],
+    /* return matcher indices */ &kMatcherIndices[1],
+    /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute),
+    /* is_deprecated */ false,
+  },
+  {
+    /* [355] */
     /* num parameters */ 0,
     /* num open types */ 0,
     /* num open numbers */ 0,
     /* open types */ &kOpenTypes[5],
     /* open numbers */ &kOpenNumbers[10],
-    /* parameters */ &kParameters[806],
+    /* parameters */ &kParameters[810],
     /* return matcher indices */ nullptr,
     /* supported_stages */ PipelineStageSet(PipelineStage::kCompute),
     /* is_deprecated */ false,
@@ -10206,21 +10250,21 @@
     /* fn abs<T : fiu32>(T) -> T */
     /* fn abs<N : num, T : fiu32>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[260],
+    /* overloads */ &kOverloads[250],
   },
   {
     /* [1] */
     /* fn acos(f32) -> f32 */
     /* fn acos<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[312],
+    /* overloads */ &kOverloads[310],
   },
   {
     /* [2] */
     /* fn all(bool) -> bool */
     /* fn all<N : num>(vec<N, bool>) -> bool */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[310],
+    /* overloads */ &kOverloads[308],
   },
   {
     /* [3] */
@@ -10233,7 +10277,7 @@
     /* [4] */
     /* fn arrayLength<T, A : access>(ptr<storage, array<T>, A>) -> u32 */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[352],
+    /* overloads */ &kOverloads[354],
   },
   {
     /* [5] */
@@ -10296,454 +10340,466 @@
     /* fn countOneBits<T : iu32>(T) -> T */
     /* fn countOneBits<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[282],
+    /* overloads */ &kOverloads[258],
   },
   {
     /* [14] */
     /* fn countTrailingZeros<T : iu32>(T) -> T */
     /* fn countTrailingZeros<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[276],
+    /* overloads */ &kOverloads[256],
   },
   {
     /* [15] */
     /* fn cross(vec3<f32>, vec3<f32>) -> vec3<f32> */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[348],
+    /* overloads */ &kOverloads[349],
   },
   {
     /* [16] */
     /* fn degrees(f32) -> f32 */
     /* fn degrees<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[254],
+    /* overloads */ &kOverloads[246],
   },
   {
     /* [17] */
     /* fn determinant<N : num>(mat<N, N, f32>) -> f32 */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[351],
+    /* overloads */ &kOverloads[353],
   },
   {
     /* [18] */
     /* fn distance(f32, f32) -> f32 */
     /* fn distance<N : num>(vec<N, f32>, vec<N, f32>) -> f32 */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[246],
+    /* overloads */ &kOverloads[240],
   },
   {
     /* [19] */
     /* fn dot<N : num, T : fiu32>(vec<N, T>, vec<N, T>) -> T */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[350],
+    /* overloads */ &kOverloads[352],
   },
   {
     /* [20] */
-    /* fn dpdx(f32) -> f32 */
-    /* fn dpdx<N : num>(vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[240],
+    /* fn dot4I8Packed(u32, u32) -> i32 */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[351],
   },
   {
     /* [21] */
-    /* fn dpdxCoarse(f32) -> f32 */
-    /* fn dpdxCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[232],
+    /* fn dot4U8Packed(u32, u32) -> u32 */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[350],
   },
   {
     /* [22] */
-    /* fn dpdxFine(f32) -> f32 */
-    /* fn dpdxFine<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn dpdx(f32) -> f32 */
+    /* fn dpdx<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[226],
+    /* overloads */ &kOverloads[204],
   },
   {
     /* [23] */
-    /* fn dpdy(f32) -> f32 */
-    /* fn dpdy<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn dpdxCoarse(f32) -> f32 */
+    /* fn dpdxCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[184],
   },
   {
     /* [24] */
-    /* fn dpdyCoarse(f32) -> f32 */
-    /* fn dpdyCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn dpdxFine(f32) -> f32 */
+    /* fn dpdxFine<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[186],
   },
   {
     /* [25] */
-    /* fn dpdyFine(f32) -> f32 */
-    /* fn dpdyFine<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn dpdy(f32) -> f32 */
+    /* fn dpdy<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[188],
   },
   {
     /* [26] */
-    /* fn exp(f32) -> f32 */
-    /* fn exp<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn dpdyCoarse(f32) -> f32 */
+    /* fn dpdyCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[190],
   },
   {
     /* [27] */
-    /* fn exp2(f32) -> f32 */
-    /* fn exp2<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn dpdyFine(f32) -> f32 */
+    /* fn dpdyFine<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[192],
   },
   {
     /* [28] */
-    /* fn extractBits<T : iu32>(T, u32, u32) -> T */
-    /* fn extractBits<N : num, T : iu32>(vec<N, T>, u32, u32) -> vec<N, T> */
+    /* fn exp(f32) -> f32 */
+    /* fn exp<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[194],
   },
   {
     /* [29] */
-    /* fn faceForward<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[349],
+    /* fn exp2(f32) -> f32 */
+    /* fn exp2<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[196],
   },
   {
     /* [30] */
-    /* fn firstLeadingBit<T : iu32>(T) -> T */
-    /* fn firstLeadingBit<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+    /* fn extractBits<T : iu32>(T, u32, u32) -> T */
+    /* fn extractBits<N : num, T : iu32>(vec<N, T>, u32, u32) -> vec<N, T> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[316],
   },
   {
     /* [31] */
-    /* fn firstTrailingBit<T : iu32>(T) -> T */
-    /* fn firstTrailingBit<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[200],
+    /* fn faceForward<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[348],
   },
   {
     /* [32] */
-    /* fn floor(f32) -> f32 */
-    /* fn floor<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn firstLeadingBit<T : iu32>(T) -> T */
+    /* fn firstLeadingBit<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[202],
   },
   {
     /* [33] */
-    /* fn fma(f32, f32, f32) -> f32 */
-    /* fn fma<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
+    /* fn firstTrailingBit<T : iu32>(T) -> T */
+    /* fn firstTrailingBit<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[204],
+    /* overloads */ &kOverloads[182],
   },
   {
     /* [34] */
-    /* fn fract(f32) -> f32 */
-    /* fn fract<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn floor(f32) -> f32 */
+    /* fn floor<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[206],
   },
   {
     /* [35] */
-    /* fn frexp(f32) -> __frexp_result */
-    /* fn frexp<N : num>(vec<N, f32>) -> __frexp_result_vec<N> */
+    /* fn fma(f32, f32, f32) -> f32 */
+    /* fn fma<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[208],
   },
   {
     /* [36] */
-    /* fn fwidth(f32) -> f32 */
-    /* fn fwidth<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn fract(f32) -> f32 */
+    /* fn fract<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[210],
   },
   {
     /* [37] */
-    /* fn fwidthCoarse(f32) -> f32 */
-    /* fn fwidthCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn frexp(f32) -> __frexp_result */
+    /* fn frexp<N : num>(vec<N, f32>) -> __frexp_result_vec<N> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[212],
   },
   {
     /* [38] */
-    /* fn fwidthFine(f32) -> f32 */
-    /* fn fwidthFine<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn fwidth(f32) -> f32 */
+    /* fn fwidth<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[214],
   },
   {
     /* [39] */
-    /* fn insertBits<T : iu32>(T, T, u32, u32) -> T */
-    /* fn insertBits<N : num, T : iu32>(vec<N, T>, vec<N, T>, u32, u32) -> vec<N, T> */
+    /* fn fwidthCoarse(f32) -> f32 */
+    /* fn fwidthCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[216],
   },
   {
     /* [40] */
-    /* fn inverseSqrt(f32) -> f32 */
-    /* fn inverseSqrt<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn fwidthFine(f32) -> f32 */
+    /* fn fwidthFine<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[218],
   },
   {
     /* [41] */
-    /* fn ldexp(f32, i32) -> f32 */
-    /* fn ldexp<N : num>(vec<N, f32>, vec<N, i32>) -> vec<N, f32> */
+    /* fn insertBits<T : iu32>(T, T, u32, u32) -> T */
+    /* fn insertBits<N : num, T : iu32>(vec<N, T>, vec<N, T>, u32, u32) -> vec<N, T> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[220],
   },
   {
     /* [42] */
-    /* fn length(f32) -> f32 */
-    /* fn length<N : num>(vec<N, f32>) -> f32 */
+    /* fn inverseSqrt(f32) -> f32 */
+    /* fn inverseSqrt<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[222],
   },
   {
     /* [43] */
-    /* fn log(f32) -> f32 */
-    /* fn log<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn ldexp(f32, i32) -> f32 */
+    /* fn ldexp<N : num>(vec<N, f32>, vec<N, i32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[224],
   },
   {
     /* [44] */
-    /* fn log2(f32) -> f32 */
-    /* fn log2<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn length(f32) -> f32 */
+    /* fn length<N : num>(vec<N, f32>) -> f32 */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[182],
+    /* overloads */ &kOverloads[248],
   },
   {
     /* [45] */
-    /* fn max<T : fiu32>(T, T) -> T */
-    /* fn max<N : num, T : fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+    /* fn log(f32) -> f32 */
+    /* fn log<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[228],
   },
   {
     /* [46] */
-    /* fn min<T : fiu32>(T, T) -> T */
-    /* fn min<N : num, T : fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+    /* fn log2(f32) -> f32 */
+    /* fn log2<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[230],
   },
   {
     /* [47] */
+    /* fn max<T : fiu32>(T, T) -> T */
+    /* fn max<N : num, T : fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[232],
+  },
+  {
+    /* [48] */
+    /* fn min<T : fiu32>(T, T) -> T */
+    /* fn min<N : num, T : fiu32>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[264],
+  },
+  {
+    /* [49] */
     /* fn mix(f32, f32, f32) -> f32 */
     /* fn mix<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* fn mix<N : num>(vec<N, f32>, vec<N, f32>, f32) -> vec<N, f32> */
     /* num overloads */ 3,
-    /* overloads */ &kOverloads[179],
-  },
-  {
-    /* [48] */
-    /* fn modf(f32) -> __modf_result */
-    /* fn modf<N : num>(vec<N, f32>) -> __modf_result_vec<N> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[234],
-  },
-  {
-    /* [49] */
-    /* fn normalize<N : num>(vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[347],
+    /* overloads */ &kOverloads[176],
   },
   {
     /* [50] */
-    /* fn pack2x16float(vec2<f32>) -> u32 */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[346],
+    /* fn modf(f32) -> __modf_result */
+    /* fn modf<N : num>(vec<N, f32>) -> __modf_result_vec<N> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[238],
   },
   {
     /* [51] */
+    /* fn normalize<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[345],
+  },
+  {
+    /* [52] */
+    /* fn pack2x16float(vec2<f32>) -> u32 */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[344],
+  },
+  {
+    /* [53] */
     /* fn pack2x16snorm(vec2<f32>) -> u32 */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[343],
   },
   {
-    /* [52] */
+    /* [54] */
     /* fn pack2x16unorm(vec2<f32>) -> u32 */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[342],
   },
   {
-    /* [53] */
+    /* [55] */
     /* fn pack4x8snorm(vec4<f32>) -> u32 */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[341],
   },
   {
-    /* [54] */
+    /* [56] */
     /* fn pack4x8unorm(vec4<f32>) -> u32 */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[340],
   },
   {
-    /* [55] */
+    /* [57] */
     /* fn pow(f32, f32) -> f32 */
     /* fn pow<N : num>(vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[248],
+    /* overloads */ &kOverloads[252],
   },
   {
-    /* [56] */
+    /* [58] */
     /* fn radians(f32) -> f32 */
     /* fn radians<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[250],
+    /* overloads */ &kOverloads[254],
   },
   {
-    /* [57] */
+    /* [59] */
     /* fn reflect<N : num>(vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[339],
   },
   {
-    /* [58] */
+    /* [60] */
     /* fn refract<N : num>(vec<N, f32>, vec<N, f32>, f32) -> vec<N, f32> */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[338],
   },
   {
-    /* [59] */
+    /* [61] */
     /* fn reverseBits<T : iu32>(T) -> T */
     /* fn reverseBits<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[256],
-  },
-  {
-    /* [60] */
-    /* fn round(f32) -> f32 */
-    /* fn round<N : num>(vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[258],
-  },
-  {
-    /* [61] */
-    /* fn select<T : scalar>(T, T, bool) -> T */
-    /* fn select<T : scalar, N : num>(vec<N, T>, vec<N, T>, bool) -> vec<N, T> */
-    /* fn select<N : num, T : scalar>(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T> */
-    /* num overloads */ 3,
-    /* overloads */ &kOverloads[176],
+    /* overloads */ &kOverloads[260],
   },
   {
     /* [62] */
-    /* fn sign(f32) -> f32 */
-    /* fn sign<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn round(f32) -> f32 */
+    /* fn round<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[262],
   },
   {
     /* [63] */
-    /* fn sin(f32) -> f32 */
-    /* fn sin<N : num>(vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[264],
+    /* fn select<T : scalar>(T, T, bool) -> T */
+    /* fn select<T : scalar, N : num>(vec<N, T>, vec<N, T>, bool) -> vec<N, T> */
+    /* fn select<N : num, T : scalar>(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T> */
+    /* num overloads */ 3,
+    /* overloads */ &kOverloads[179],
   },
   {
     /* [64] */
-    /* fn sinh(f32) -> f32 */
-    /* fn sinh<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn sign(f32) -> f32 */
+    /* fn sign<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[266],
   },
   {
     /* [65] */
-    /* fn smoothstep(f32, f32, f32) -> f32 */
-    /* fn smoothstep<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
+    /* fn sin(f32) -> f32 */
+    /* fn sin<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[268],
   },
   {
     /* [66] */
-    /* fn smoothStep(f32, f32, f32) -> f32 */
-    /* fn smoothStep<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
+    /* fn sinh(f32) -> f32 */
+    /* fn sinh<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[270],
   },
   {
     /* [67] */
-    /* fn sqrt(f32) -> f32 */
-    /* fn sqrt<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn smoothstep(f32, f32, f32) -> f32 */
+    /* fn smoothstep<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[272],
   },
   {
     /* [68] */
-    /* fn step(f32, f32) -> f32 */
-    /* fn step<N : num>(vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
+    /* fn smoothStep(f32, f32, f32) -> f32 */
+    /* fn smoothStep<N : num>(vec<N, f32>, vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[274],
   },
   {
     /* [69] */
-    /* fn storageBarrier() */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[337],
+    /* fn sqrt(f32) -> f32 */
+    /* fn sqrt<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[276],
   },
   {
     /* [70] */
-    /* fn tan(f32) -> f32 */
-    /* fn tan<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn step(f32, f32) -> f32 */
+    /* fn step<N : num>(vec<N, f32>, vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[278],
   },
   {
     /* [71] */
-    /* fn tanh(f32) -> f32 */
-    /* fn tanh<N : num>(vec<N, f32>) -> vec<N, f32> */
-    /* num overloads */ 2,
-    /* overloads */ &kOverloads[280],
-  },
-  {
-    /* [72] */
-    /* fn transpose<M : num, N : num>(mat<M, N, f32>) -> mat<N, M, f32> */
+    /* fn storageBarrier() */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[320],
   },
   {
+    /* [72] */
+    /* fn tan(f32) -> f32 */
+    /* fn tan<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[282],
+  },
+  {
     /* [73] */
-    /* fn trunc(f32) -> f32 */
-    /* fn trunc<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* fn tanh(f32) -> f32 */
+    /* fn tanh<N : num>(vec<N, f32>) -> vec<N, f32> */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[284],
   },
   {
     /* [74] */
-    /* fn unpack2x16float(u32) -> vec2<f32> */
+    /* fn transpose<M : num, N : num>(mat<M, N, f32>) -> mat<N, M, f32> */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[335],
+    /* overloads */ &kOverloads[336],
   },
   {
     /* [75] */
-    /* fn unpack2x16snorm(u32) -> vec2<f32> */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[334],
+    /* fn trunc(f32) -> f32 */
+    /* fn trunc<N : num>(vec<N, f32>) -> vec<N, f32> */
+    /* num overloads */ 2,
+    /* overloads */ &kOverloads[288],
   },
   {
     /* [76] */
+    /* fn unpack2x16float(u32) -> vec2<f32> */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[324],
+  },
+  {
+    /* [77] */
+    /* fn unpack2x16snorm(u32) -> vec2<f32> */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[323],
+  },
+  {
+    /* [78] */
     /* fn unpack2x16unorm(u32) -> vec2<f32> */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[322],
   },
   {
-    /* [77] */
+    /* [79] */
     /* fn unpack4x8snorm(u32) -> vec4<f32> */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[321],
   },
   {
-    /* [78] */
+    /* [80] */
     /* fn unpack4x8unorm(u32) -> vec4<f32> */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[336],
+    /* overloads */ &kOverloads[337],
   },
   {
-    /* [79] */
+    /* [81] */
     /* fn workgroupBarrier() */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[353],
+    /* overloads */ &kOverloads[355],
   },
   {
-    /* [80] */
+    /* [82] */
     /* fn textureDimensions<T : fiu32>(texture: texture_1d<T>) -> i32 */
     /* fn textureDimensions<T : fiu32>(texture: texture_1d<T>, level: i32) -> i32 */
     /* fn textureDimensions<T : fiu32>(texture: texture_2d<T>) -> vec2<i32> */
@@ -10775,7 +10831,7 @@
     /* overloads */ &kOverloads[0],
   },
   {
-    /* [81] */
+    /* [83] */
     /* fn textureGather<T : fiu32>(component: i32, texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T> */
     /* fn textureGather<T : fiu32>(component: i32, texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<T> */
     /* fn textureGather<T : fiu32>(component: i32, texture: texture_2d_array<T>, sampler: sampler, coords: vec2<f32>, array_index: i32) -> vec4<T> */
@@ -10789,10 +10845,10 @@
     /* fn textureGather(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
     /* fn textureGather(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: i32) -> vec4<f32> */
     /* num overloads */ 12,
-    /* overloads */ &kOverloads[69],
+    /* overloads */ &kOverloads[57],
   },
   {
-    /* [82] */
+    /* [84] */
     /* fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> vec4<f32> */
     /* fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> vec4<f32> */
     /* fn textureGatherCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> vec4<f32> */
@@ -10800,10 +10856,10 @@
     /* fn textureGatherCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> vec4<f32> */
     /* fn textureGatherCompare(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> vec4<f32> */
     /* num overloads */ 6,
-    /* overloads */ &kOverloads[132],
+    /* overloads */ &kOverloads[144],
   },
   {
-    /* [83] */
+    /* [85] */
     /* fn textureNumLayers<T : fiu32>(texture: texture_2d_array<T>) -> i32 */
     /* fn textureNumLayers<T : fiu32>(texture: texture_cube_array<T>) -> i32 */
     /* fn textureNumLayers(texture: texture_depth_2d_array) -> i32 */
@@ -10813,7 +10869,7 @@
     /* overloads */ &kOverloads[155],
   },
   {
-    /* [84] */
+    /* [86] */
     /* fn textureNumLevels<T : fiu32>(texture: texture_1d<T>) -> i32 */
     /* fn textureNumLevels<T : fiu32>(texture: texture_2d<T>) -> i32 */
     /* fn textureNumLevels<T : fiu32>(texture: texture_2d_array<T>) -> i32 */
@@ -10828,14 +10884,14 @@
     /* overloads */ &kOverloads[81],
   },
   {
-    /* [85] */
+    /* [87] */
     /* fn textureNumSamples<T : fiu32>(texture: texture_multisampled_2d<T>) -> i32 */
     /* fn textureNumSamples(texture: texture_depth_multisampled_2d) -> i32 */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[308],
+    /* overloads */ &kOverloads[312],
   },
   {
-    /* [86] */
+    /* [88] */
     /* fn textureSample(texture: texture_1d<f32>, sampler: sampler, coords: f32) -> vec4<f32> */
     /* fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
     /* fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<f32> */
@@ -10852,10 +10908,10 @@
     /* fn textureSample(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> f32 */
     /* fn textureSample(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: i32) -> f32 */
     /* num overloads */ 15,
-    /* overloads */ &kOverloads[27],
+    /* overloads */ &kOverloads[42],
   },
   {
-    /* [87] */
+    /* [89] */
     /* fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32) -> vec4<f32> */
     /* fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32, offset: vec2<i32>) -> vec4<f32> */
     /* fn textureSampleBias(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, bias: f32) -> vec4<f32> */
@@ -10868,7 +10924,7 @@
     /* overloads */ &kOverloads[117],
   },
   {
-    /* [88] */
+    /* [90] */
     /* fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32 */
     /* fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> f32 */
     /* fn textureSampleCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> f32 */
@@ -10876,10 +10932,10 @@
     /* fn textureSampleCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32 */
     /* fn textureSampleCompare(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> f32 */
     /* num overloads */ 6,
-    /* overloads */ &kOverloads[144],
+    /* overloads */ &kOverloads[138],
   },
   {
-    /* [89] */
+    /* [91] */
     /* fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32 */
     /* fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> f32 */
     /* fn textureSampleCompareLevel(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> f32 */
@@ -10887,10 +10943,10 @@
     /* fn textureSampleCompareLevel(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32 */
     /* fn textureSampleCompareLevel(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> f32 */
     /* num overloads */ 6,
-    /* overloads */ &kOverloads[138],
+    /* overloads */ &kOverloads[132],
   },
   {
-    /* [90] */
+    /* [92] */
     /* fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32> */
     /* fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>, offset: vec2<i32>) -> vec4<f32> */
     /* fn textureSampleGrad(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32> */
@@ -10903,7 +10959,7 @@
     /* overloads */ &kOverloads[109],
   },
   {
-    /* [91] */
+    /* [93] */
     /* fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32> */
     /* fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, offset: vec2<i32>) -> vec4<f32> */
     /* fn textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, level: f32) -> vec4<f32> */
@@ -10920,10 +10976,10 @@
     /* fn textureSampleLevel(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: i32, level: i32) -> f32 */
     /* fn textureSampleLevel(texture: texture_external, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
     /* num overloads */ 15,
-    /* overloads */ &kOverloads[42],
+    /* overloads */ &kOverloads[27],
   },
   {
-    /* [92] */
+    /* [94] */
     /* fn textureStore(texture: texture_storage_1d<f32_texel_format, write>, coords: i32, value: vec4<f32>) */
     /* fn textureStore(texture: texture_storage_2d<f32_texel_format, write>, coords: vec2<i32>, value: vec4<f32>) */
     /* fn textureStore(texture: texture_storage_2d_array<f32_texel_format, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>) */
@@ -10937,10 +10993,10 @@
     /* fn textureStore(texture: texture_storage_2d_array<u32_texel_format, write>, coords: vec2<i32>, array_index: i32, value: vec4<u32>) */
     /* fn textureStore(texture: texture_storage_3d<u32_texel_format, write>, coords: vec3<i32>, value: vec4<u32>) */
     /* num overloads */ 12,
-    /* overloads */ &kOverloads[57],
+    /* overloads */ &kOverloads[69],
   },
   {
-    /* [93] */
+    /* [95] */
     /* fn textureLoad<T : fiu32>(texture: texture_1d<T>, coords: i32, level: i32) -> vec4<T> */
     /* fn textureLoad<T : fiu32>(texture: texture_2d<T>, coords: vec2<i32>, level: i32) -> vec4<T> */
     /* fn textureLoad<T : fiu32>(texture: texture_2d_array<T>, coords: vec2<i32>, array_index: i32, level: i32) -> vec4<T> */
@@ -10954,71 +11010,71 @@
     /* overloads */ &kOverloads[100],
   },
   {
-    /* [94] */
-    /* fn atomicLoad<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>) -> T */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[323],
-  },
-  {
-    /* [95] */
-    /* fn atomicStore<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) */
-    /* num overloads */ 1,
-    /* overloads */ &kOverloads[324],
-  },
-  {
     /* [96] */
-    /* fn atomicAdd<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicLoad<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[325],
   },
   {
     /* [97] */
-    /* fn atomicSub<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicStore<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[326],
   },
   {
     /* [98] */
-    /* fn atomicMax<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicAdd<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[327],
   },
   {
     /* [99] */
-    /* fn atomicMin<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicSub<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[328],
   },
   {
     /* [100] */
-    /* fn atomicAnd<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicMax<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[329],
   },
   {
     /* [101] */
-    /* fn atomicOr<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicMin<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[330],
   },
   {
     /* [102] */
-    /* fn atomicXor<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicAnd<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[331],
   },
   {
     /* [103] */
-    /* fn atomicExchange<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* fn atomicOr<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[332],
   },
   {
     /* [104] */
-    /* fn atomicCompareExchangeWeak<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T, T) -> vec2<T> */
+    /* fn atomicXor<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
     /* num overloads */ 1,
     /* overloads */ &kOverloads[333],
   },
+  {
+    /* [105] */
+    /* fn atomicExchange<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[334],
+  },
+  {
+    /* [106] */
+    /* fn atomicCompareExchangeWeak<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T, T) -> vec2<T> */
+    /* num overloads */ 1,
+    /* overloads */ &kOverloads[335],
+  },
 };
 
 constexpr IntrinsicInfo kOperators[] = {
@@ -11027,14 +11083,14 @@
     /* op !(bool) -> bool */
     /* op !<N : num>(vec<N, bool>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[288],
+    /* overloads */ &kOverloads[286],
   },
   {
     /* [1] */
     /* op ~<T : iu32>(T) -> T */
     /* op ~<T : iu32, N : num>(vec<N, T>) -> vec<N, T> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[286],
+    /* overloads */ &kOverloads[280],
   },
   {
     /* [2] */
@@ -11079,7 +11135,7 @@
     /* op /<T : fiu32, N : num>(vec<N, T>, T) -> vec<N, T> */
     /* op /<T : fiu32, N : num>(T, vec<N, T>) -> vec<N, T> */
     /* num overloads */ 4,
-    /* overloads */ &kOverloads[160],
+    /* overloads */ &kOverloads[172],
   },
   {
     /* [6] */
@@ -11088,7 +11144,7 @@
     /* op %<T : fiu32, N : num>(vec<N, T>, T) -> vec<N, T> */
     /* op %<T : fiu32, N : num>(T, vec<N, T>) -> vec<N, T> */
     /* num overloads */ 4,
-    /* overloads */ &kOverloads[164],
+    /* overloads */ &kOverloads[160],
   },
   {
     /* [7] */
@@ -11104,7 +11160,7 @@
     /* op &<T : iu32>(T, T) -> T */
     /* op &<T : iu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
     /* num overloads */ 4,
-    /* overloads */ &kOverloads[168],
+    /* overloads */ &kOverloads[164],
   },
   {
     /* [9] */
@@ -11113,61 +11169,61 @@
     /* op |<T : iu32>(T, T) -> T */
     /* op |<T : iu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
     /* num overloads */ 4,
-    /* overloads */ &kOverloads[172],
+    /* overloads */ &kOverloads[168],
   },
   {
     /* [10] */
     /* op &&(bool, bool) -> bool */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[344],
+    /* overloads */ &kOverloads[346],
   },
   {
     /* [11] */
     /* op ||(bool, bool) -> bool */
     /* num overloads */ 1,
-    /* overloads */ &kOverloads[345],
+    /* overloads */ &kOverloads[347],
   },
   {
     /* [12] */
     /* op ==<T : scalar>(T, T) -> bool */
     /* op ==<T : scalar, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[238],
+    /* overloads */ &kOverloads[200],
   },
   {
     /* [13] */
     /* op !=<T : scalar>(T, T) -> bool */
     /* op !=<T : scalar, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[236],
+    /* overloads */ &kOverloads[198],
   },
   {
     /* [14] */
     /* op <<T : fiu32>(T, T) -> bool */
     /* op <<T : fiu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[198],
+    /* overloads */ &kOverloads[226],
   },
   {
     /* [15] */
     /* op ><T : fiu32>(T, T) -> bool */
     /* op ><T : fiu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[196],
+    /* overloads */ &kOverloads[234],
   },
   {
     /* [16] */
     /* op <=<T : fiu32>(T, T) -> bool */
     /* op <=<T : fiu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[242],
+    /* overloads */ &kOverloads[236],
   },
   {
     /* [17] */
     /* op >=<T : fiu32>(T, T) -> bool */
     /* op >=<T : fiu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
     /* num overloads */ 2,
-    /* overloads */ &kOverloads[252],
+    /* overloads */ &kOverloads[242],
   },
   {
     /* [18] */
diff --git a/src/tint/resolver/pipeline_overridable_constant_test.cc b/src/tint/resolver/pipeline_overridable_constant_test.cc
index 35c145e..035936c 100644
--- a/src/tint/resolver/pipeline_overridable_constant_test.cc
+++ b/src/tint/resolver/pipeline_overridable_constant_test.cc
@@ -16,6 +16,8 @@
 
 #include "src/tint/resolver/resolver_test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::resolver {
 namespace {
 
@@ -36,7 +38,7 @@
 };
 
 TEST_F(ResolverPipelineOverridableConstantTest, NonOverridable) {
-    auto* a = GlobalConst("a", ty.f32(), Expr(1.f));
+    auto* a = GlobalConst("a", ty.f32(), Expr(1_f));
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 
@@ -48,7 +50,7 @@
 }
 
 TEST_F(ResolverPipelineOverridableConstantTest, WithId) {
-    auto* a = Override("a", ty.f32(), Expr(1.f), {Id(7u)});
+    auto* a = Override("a", ty.f32(), Expr(1_f), {Id(7u)});
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 
@@ -56,7 +58,7 @@
 }
 
 TEST_F(ResolverPipelineOverridableConstantTest, WithoutId) {
-    auto* a = Override("a", ty.f32(), Expr(1.f));
+    auto* a = Override("a", ty.f32(), Expr(1_f));
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 
@@ -65,12 +67,12 @@
 
 TEST_F(ResolverPipelineOverridableConstantTest, WithAndWithoutIds) {
     std::vector<ast::Variable*> variables;
-    auto* a = Override("a", ty.f32(), Expr(1.f));
-    auto* b = Override("b", ty.f32(), Expr(1.f));
-    auto* c = Override("c", ty.f32(), Expr(1.f), {Id(2u)});
-    auto* d = Override("d", ty.f32(), Expr(1.f), {Id(4u)});
-    auto* e = Override("e", ty.f32(), Expr(1.f));
-    auto* f = Override("f", ty.f32(), Expr(1.f), {Id(1u)});
+    auto* a = Override("a", ty.f32(), Expr(1_f));
+    auto* b = Override("b", ty.f32(), Expr(1_f));
+    auto* c = Override("c", ty.f32(), Expr(1_f), {Id(2u)});
+    auto* d = Override("d", ty.f32(), Expr(1_f), {Id(4u)});
+    auto* e = Override("e", ty.f32(), Expr(1_f));
+    auto* f = Override("f", ty.f32(), Expr(1_f), {Id(1u)});
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 
@@ -84,8 +86,8 @@
 }
 
 TEST_F(ResolverPipelineOverridableConstantTest, DuplicateIds) {
-    Override("a", ty.f32(), Expr(1.f), {Id(Source{{12, 34}}, 7u)});
-    Override("b", ty.f32(), Expr(1.f), {Id(Source{{56, 78}}, 7u)});
+    Override("a", ty.f32(), Expr(1_f), {Id(Source{{12, 34}}, 7u)});
+    Override("b", ty.f32(), Expr(1_f), {Id(Source{{56, 78}}, 7u)});
 
     EXPECT_FALSE(r()->Resolve());
 
@@ -94,7 +96,7 @@
 }
 
 TEST_F(ResolverPipelineOverridableConstantTest, IdTooLarge) {
-    Override("a", ty.f32(), Expr(1.f), {Id(Source{{12, 34}}, 65536u)});
+    Override("a", ty.f32(), Expr(1_f), {Id(Source{{12, 34}}, 65536u)});
 
     EXPECT_FALSE(r()->Resolve());
 
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index f2d62a5..4183b44 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -1309,6 +1309,10 @@
 
     current_function_->AddDirectlyCalledBuiltin(builtin);
 
+    if (!validator_.RequiredExtensionForBuiltinFunction(call, builder_->AST().Extensions())) {
+        return nullptr;
+    }
+
     if (IsTextureBuiltin(builtin_type)) {
         if (!validator_.TextureBuiltinFunction(call)) {
             return nullptr;
diff --git a/src/tint/resolver/resolver_constants.cc b/src/tint/resolver/resolver_constants.cc
index f5346d1..2a8a1d1 100644
--- a/src/tint/resolver/resolver_constants.cc
+++ b/src/tint/resolver/resolver_constants.cc
@@ -38,12 +38,12 @@
         literal,
         [&](const ast::IntLiteralExpression* lit) {
             if (lit->suffix == ast::IntLiteralExpression::Suffix::kU) {
-                return sem::Constant{type, {u32(static_cast<uint32_t>(lit->value))}};
+                return sem::Constant{type, {u32(lit->value)}};
             }
-            return sem::Constant{type, {i32(static_cast<int32_t>(lit->value))}};
+            return sem::Constant{type, {i32(lit->value)}};
         },
         [&](const ast::FloatLiteralExpression* lit) {
-            return sem::Constant{type, {lit->value}};
+            return sem::Constant{type, {f32(lit->value)}};
         },
         [&](const ast::BoolLiteralExpression* lit) {
             return sem::Constant{type, {lit->value}};
@@ -71,7 +71,7 @@
             return sem::Constant(type, sem::Constant::Scalars(result_size, 0_u));
         }
         if (elem_type->Is<sem::F32>()) {
-            return sem::Constant(type, sem::Constant::Scalars(result_size, 0.f));
+            return sem::Constant(type, sem::Constant::Scalars(result_size, 0_f));
         }
         if (elem_type->Is<sem::Bool>()) {
             return sem::Constant(type, sem::Constant::Scalars(result_size, false));
diff --git a/src/tint/resolver/resolver_constants_test.cc b/src/tint/resolver/resolver_constants_test.cc
index 798de0a..a9624ca 100644
--- a/src/tint/resolver/resolver_constants_test.cc
+++ b/src/tint/resolver/resolver_constants_test.cc
@@ -58,7 +58,7 @@
 }
 
 TEST_F(ResolverConstantsTest, Scalar_f32) {
-    auto* expr = Expr(9.9f);
+    auto* expr = Expr(9.9_f);
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -139,9 +139,9 @@
     EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
     EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::F32>());
     ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
-    EXPECT_EQ(sem->ConstantValue().Elements()[0].f32, 0u);
-    EXPECT_EQ(sem->ConstantValue().Elements()[1].f32, 0u);
-    EXPECT_EQ(sem->ConstantValue().Elements()[2].f32, 0u);
+    EXPECT_EQ(sem->ConstantValue().Elements()[0].f32, 0.0f);
+    EXPECT_EQ(sem->ConstantValue().Elements()[1].f32, 0.0f);
+    EXPECT_EQ(sem->ConstantValue().Elements()[2].f32, 0.0f);
 }
 
 TEST_F(ResolverConstantsTest, Vec3_ZeroInit_bool) {
@@ -202,7 +202,7 @@
 }
 
 TEST_F(ResolverConstantsTest, Vec3_Splat_f32) {
-    auto* expr = vec3<f32>(9.9f);
+    auto* expr = vec3<f32>(9.9_f);
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -278,7 +278,7 @@
 }
 
 TEST_F(ResolverConstantsTest, Vec3_FullConstruct_f32) {
-    auto* expr = vec3<f32>(1.f, 2.f, 3.f);
+    auto* expr = vec3<f32>(1_f, 2_f, 3_f);
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -354,7 +354,7 @@
 }
 
 TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f32) {
-    auto* expr = vec3<f32>(1.f, vec2<f32>(2.f, 3.f));
+    auto* expr = vec3<f32>(1_f, vec2<f32>(2_f, 3_f));
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -392,7 +392,7 @@
 }
 
 TEST_F(ResolverConstantsTest, Vec3_Cast_f32_to_32) {
-    auto* expr = vec3<i32>(vec3<f32>(1.1f, 2.2f, 3.3f));
+    auto* expr = vec3<i32>(vec3<f32>(1.1_f, 2.2_f, 3.3_f));
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
diff --git a/src/tint/resolver/resolver_test.cc b/src/tint/resolver/resolver_test.cc
index 8b2b04f..3b86a48 100644
--- a/src/tint/resolver/resolver_test.cc
+++ b/src/tint/resolver/resolver_test.cc
@@ -88,7 +88,7 @@
 TEST_F(ResolverTest, Stmt_Assign) {
     auto* v = Var("v", ty.f32());
     auto* lhs = Expr("v");
-    auto* rhs = Expr(2.3f);
+    auto* rhs = Expr(2.3_f);
 
     auto* assign = Assign(lhs, rhs);
     WrapInFunction(v, assign);
@@ -107,7 +107,7 @@
 TEST_F(ResolverTest, Stmt_Case) {
     auto* v = Var("v", ty.f32());
     auto* lhs = Expr("v");
-    auto* rhs = Expr(2.3f);
+    auto* rhs = Expr(2.3_f);
 
     auto* assign = Assign(lhs, rhs);
     auto* block = Block(assign);
@@ -132,7 +132,7 @@
 TEST_F(ResolverTest, Stmt_Block) {
     auto* v = Var("v", ty.f32());
     auto* lhs = Expr("v");
-    auto* rhs = Expr(2.3f);
+    auto* rhs = Expr(2.3_f);
 
     auto* assign = Assign(lhs, rhs);
     auto* block = Block(assign);
@@ -154,7 +154,7 @@
 TEST_F(ResolverTest, Stmt_If) {
     auto* v = Var("v", ty.f32());
     auto* else_lhs = Expr("v");
-    auto* else_rhs = Expr(2.3f);
+    auto* else_rhs = Expr(2.3_f);
 
     auto* else_body = Block(Assign(else_lhs, else_rhs));
 
@@ -162,7 +162,7 @@
     auto* else_stmt = If(else_cond, else_body);
 
     auto* lhs = Expr("v");
-    auto* rhs = Expr(2.3f);
+    auto* rhs = Expr(2.3_f);
 
     auto* assign = Assign(lhs, rhs);
     auto* body = Block(assign);
@@ -195,11 +195,11 @@
 TEST_F(ResolverTest, Stmt_Loop) {
     auto* v = Var("v", ty.f32());
     auto* body_lhs = Expr("v");
-    auto* body_rhs = Expr(2.3f);
+    auto* body_rhs = Expr(2.3_f);
 
     auto* body = Block(Assign(body_lhs, body_rhs), Break());
     auto* continuing_lhs = Expr("v");
-    auto* continuing_rhs = Expr(2.3f);
+    auto* continuing_rhs = Expr(2.3_f);
 
     auto* continuing = Block(Assign(continuing_lhs, continuing_rhs));
     auto* stmt = Loop(body, continuing);
@@ -243,7 +243,7 @@
 TEST_F(ResolverTest, Stmt_Switch) {
     auto* v = Var("v", ty.f32());
     auto* lhs = Expr("v");
-    auto* rhs = Expr(2.3f);
+    auto* rhs = Expr(2.3_f);
     auto* case_block = Block(Assign(lhs, rhs));
     auto* stmt = Switch(Expr(2_i), Case(Expr(3_i), case_block), DefaultCase());
     WrapInFunction(v, stmt);
@@ -340,7 +340,7 @@
     auto* inner = Block(foo_i32_decl, bar_i32_decl);
 
     // Declare f32 "foo" at function scope
-    auto* foo_f32 = Var("foo", ty.f32(), ast::StorageClass::kNone, Expr(2.f));
+    auto* foo_f32 = Var("foo", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
     auto* foo_f32_init = foo_f32->constructor;
     auto* foo_f32_decl = Decl(foo_f32);
 
@@ -390,7 +390,7 @@
     Func("func_i32", params, ty.void_(), {fn_i32_decl}, ast::AttributeList{});
 
     // Declare f32 "foo" at module scope
-    auto* mod_f32 = Var("foo", ty.f32(), ast::StorageClass::kPrivate, Expr(2.f));
+    auto* mod_f32 = Var("foo", ty.f32(), ast::StorageClass::kPrivate, Expr(2_f));
     auto* mod_init = mod_f32->constructor;
     AST().AddGlobalVariable(mod_f32);
 
@@ -486,7 +486,7 @@
 
 TEST_F(ResolverTest, Expr_Call) {
     ast::VariableList params;
-    Func("my_func", params, ty.f32(), {Return(0.0f)}, ast::AttributeList{});
+    Func("my_func", params, ty.f32(), {Return(0_f)}, ast::AttributeList{});
 
     auto* call = Call("my_func");
     WrapInFunction(call);
@@ -499,7 +499,7 @@
 
 TEST_F(ResolverTest, Expr_Call_InBinaryOp) {
     ast::VariableList params;
-    Func("func", params, ty.f32(), {Return(0.0f)}, ast::AttributeList{});
+    Func("func", params, ty.f32(), {Return(0_f)}, ast::AttributeList{});
 
     auto* expr = Add(Call("func"), Call("func"));
     WrapInFunction(expr);
@@ -513,10 +513,10 @@
 TEST_F(ResolverTest, Expr_Call_WithParams) {
     Func("my_func", {Param(Sym(), ty.f32())}, ty.f32(),
          {
-             Return(1.2f),
+             Return(1.2_f),
          });
 
-    auto* param = Expr(2.4f);
+    auto* param = Expr(2.4_f);
 
     auto* call = Call("my_func", param);
     WrapInFunction(call);
@@ -528,7 +528,7 @@
 }
 
 TEST_F(ResolverTest, Expr_Call_Builtin) {
-    auto* call = Call("round", 2.4f);
+    auto* call = Call("round", 2.4_f);
     WrapInFunction(call);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -550,7 +550,7 @@
 }
 
 TEST_F(ResolverTest, Expr_Constructor_Scalar) {
-    auto* s = Expr(1.0f);
+    auto* s = Expr(1_f);
     WrapInFunction(s);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -560,7 +560,7 @@
 }
 
 TEST_F(ResolverTest, Expr_Constructor_Type_Vec2) {
-    auto* tc = vec2<f32>(1.0f, 1.0f);
+    auto* tc = vec2<f32>(1_f, 1_f);
     WrapInFunction(tc);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -572,7 +572,7 @@
 }
 
 TEST_F(ResolverTest, Expr_Constructor_Type_Vec3) {
-    auto* tc = vec3<f32>(1.0f, 1.0f, 1.0f);
+    auto* tc = vec3<f32>(1_f, 1_f, 1_f);
     WrapInFunction(tc);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -584,7 +584,7 @@
 }
 
 TEST_F(ResolverTest, Expr_Constructor_Type_Vec4) {
-    auto* tc = vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f);
+    auto* tc = vec4<f32>(1_f, 1_f, 1_f, 1_f);
     WrapInFunction(tc);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -703,7 +703,7 @@
     auto* p = Expr("p");
     auto* v_decl = Decl(Var("v", ty.f32()));
     auto* p_decl = Decl(Let("p", ty.pointer<f32>(ast::StorageClass::kFunction), AddressOf(v)));
-    auto* assign = Assign(Deref(p), 1.23f);
+    auto* assign = Assign(Deref(p), 1.23_f);
     Func("my_func", ast::VariableList{}, ty.void_(),
          {
              v_decl,
@@ -725,7 +725,7 @@
 }
 
 TEST_F(ResolverTest, Expr_Call_Function) {
-    Func("my_func", ast::VariableList{}, ty.f32(), {Return(0.0f)}, ast::AttributeList{});
+    Func("my_func", ast::VariableList{}, ty.f32(), {Return(0_f)}, ast::AttributeList{});
 
     auto* call = Call("my_func");
     WrapInFunction(call);
@@ -815,7 +815,7 @@
 
     Func("my_func", ast::VariableList{}, ty.f32(),
          {Assign("wg_var", "wg_var"), Assign("sb_var", "sb_var"), Assign("priv_var", "priv_var"),
-          Return(0.0f)},
+          Return(0_f)},
          ast::AttributeList{});
 
     auto* func2 = Func("func", ast::VariableList{}, ty.void_(),
@@ -841,7 +841,7 @@
     auto* func = Func("my_func", ast::VariableList{}, ty.void_(),
                       {
                           Decl(Var("var", ty.f32())),
-                          Assign("var", 1.f),
+                          Assign("var", 1_f),
                       });
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -1795,11 +1795,11 @@
     Global("call_c", ty.f32(), ast::StorageClass::kPrivate);
 
     ast::VariableList params;
-    auto* func_b = Func("b", params, ty.f32(), {Return(0.0f)}, ast::AttributeList{});
-    auto* func_c = Func("c", params, ty.f32(), {Assign("second", Call("b")), Return(0.0f)},
+    auto* func_b = Func("b", params, ty.f32(), {Return(0_f)}, ast::AttributeList{});
+    auto* func_c = Func("c", params, ty.f32(), {Assign("second", Call("b")), Return(0_f)},
                         ast::AttributeList{});
 
-    auto* func_a = Func("a", params, ty.f32(), {Assign("first", Call("c")), Return(0.0f)},
+    auto* func_a = Func("a", params, ty.f32(), {Assign("first", Call("c")), Return(0_f)},
                         ast::AttributeList{});
 
     auto* ep_1 = Func("ep_1", params, ty.void_(),
@@ -1959,7 +1959,7 @@
     Global("t", ty.sampled_texture(ast::TextureDimension::k2d, ty.f32()), GroupAndBinding(1, 1));
     Global("s", ty.sampler(ast::SamplerKind::kSampler), GroupAndBinding(1, 2));
 
-    auto* call = CallStmt(Call("textureSample", "t", "s", vec2<f32>(1.0f, 2.0f)));
+    auto* call = CallStmt(Call("textureSample", "t", "s", vec2<f32>(1_f, 2_f)));
     const ast::Function* f =
         Func("test_function", {}, ty.void_(), {call}, {Stage(ast::PipelineStage::kFragment)});
 
@@ -1976,7 +1976,7 @@
     Global("t", ty.sampled_texture(ast::TextureDimension::k2d, ty.f32()), GroupAndBinding(1, 1));
     Global("s", ty.sampler(ast::SamplerKind::kSampler), GroupAndBinding(1, 2));
 
-    auto* inner_call = CallStmt(Call("textureSample", "t", "s", vec2<f32>(1.0f, 2.0f)));
+    auto* inner_call = CallStmt(Call("textureSample", "t", "s", vec2<f32>(1_f, 2_f)));
     const ast::Function* inner_func = Func("inner_func", {}, ty.void_(), {inner_call});
     auto* outer_call = CallStmt(Call("inner_func"));
     const ast::Function* outer_func =
@@ -1999,9 +1999,9 @@
     Global("t", ty.sampled_texture(ast::TextureDimension::k2d, ty.f32()), GroupAndBinding(1, 1));
     Global("s", ty.sampler(ast::SamplerKind::kSampler), GroupAndBinding(1, 2));
 
-    auto* inner_call_1 = CallStmt(Call("textureSample", "t", "s", vec2<f32>(1.0f, 2.0f)));
+    auto* inner_call_1 = CallStmt(Call("textureSample", "t", "s", vec2<f32>(1_f, 2_f)));
     const ast::Function* inner_func_1 = Func("inner_func_1", {}, ty.void_(), {inner_call_1});
-    auto* inner_call_2 = CallStmt(Call("textureSample", "t", "s", vec2<f32>(3.0f, 4.0f)));
+    auto* inner_call_2 = CallStmt(Call("textureSample", "t", "s", vec2<f32>(3_f, 4_f)));
     const ast::Function* inner_func_2 = Func("inner_func_2", {}, ty.void_(), {inner_call_2});
     auto* outer_call_1 = CallStmt(Call("inner_func_1"));
     auto* outer_call_2 = CallStmt(Call("inner_func_2"));
@@ -2032,9 +2032,9 @@
     Global("t2", ty.sampled_texture(ast::TextureDimension::k2d, ty.f32()), GroupAndBinding(1, 2));
     Global("s", ty.sampler(ast::SamplerKind::kSampler), GroupAndBinding(1, 3));
 
-    auto* inner_call_1 = CallStmt(Call("textureSample", "t1", "s", vec2<f32>(1.0f, 2.0f)));
+    auto* inner_call_1 = CallStmt(Call("textureSample", "t1", "s", vec2<f32>(1_f, 2_f)));
     const ast::Function* inner_func_1 = Func("inner_func_1", {}, ty.void_(), {inner_call_1});
-    auto* inner_call_2 = CallStmt(Call("textureSample", "t2", "s", vec2<f32>(3.0f, 4.0f)));
+    auto* inner_call_2 = CallStmt(Call("textureSample", "t2", "s", vec2<f32>(3_f, 4_f)));
     const ast::Function* inner_func_2 = Func("inner_func_2", {}, ty.void_(), {inner_call_2});
     auto* outer_call_1 = CallStmt(Call("inner_func_1"));
     auto* outer_call_2 = CallStmt(Call("inner_func_2"));
diff --git a/src/tint/resolver/source_variable_test.cc b/src/tint/resolver/source_variable_test.cc
index f9fe2fb..cd943f3 100644
--- a/src/tint/resolver/source_variable_test.cc
+++ b/src/tint/resolver/source_variable_test.cc
@@ -81,7 +81,7 @@
 }
 
 TEST_F(ResolverSourceVariableTest, GlobalOverride) {
-    auto* a = Override("a", ty.f32(), Expr(1.f));
+    auto* a = Override("a", ty.f32(), Expr(1_f));
     auto* expr = Expr(a);
     WrapInFunction(expr);
 
@@ -92,7 +92,7 @@
 }
 
 TEST_F(ResolverSourceVariableTest, GlobalConst) {
-    auto* a = GlobalConst("a", ty.f32(), Expr(1.f));
+    auto* a = GlobalConst("a", ty.f32(), Expr(1_f));
     auto* expr = Expr(a);
     WrapInFunction(expr);
 
@@ -114,7 +114,7 @@
 }
 
 TEST_F(ResolverSourceVariableTest, FunctionLet) {
-    auto* a = Let("a", ty.f32(), Expr(1.f));
+    auto* a = Let("a", ty.f32(), Expr(1_f));
     auto* expr = Expr(a);
     WrapInFunction(a, expr);
 
@@ -250,7 +250,7 @@
 }
 
 TEST_F(ResolverSourceVariableTest, Literal) {
-    auto* expr = Expr(1.f);
+    auto* expr = Expr(1_f);
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -259,7 +259,7 @@
 }
 
 TEST_F(ResolverSourceVariableTest, FunctionReturnValue) {
-    auto* expr = Call("min", 1.f, 2.f);
+    auto* expr = Call("min", 1_f, 2_f);
     WrapInFunction(expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
@@ -269,7 +269,7 @@
 
 TEST_F(ResolverSourceVariableTest, BinaryExpression) {
     auto* a = Var("a", ty.f32(), ast::StorageClass::kNone);
-    auto* expr = Add(a, Expr(1.f));
+    auto* expr = Add(a, Expr(1_f));
     WrapInFunction(a, expr);
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
diff --git a/src/tint/resolver/struct_pipeline_stage_use_test.cc b/src/tint/resolver/struct_pipeline_stage_use_test.cc
index 6b9ede9..1ca80df 100644
--- a/src/tint/resolver/struct_pipeline_stage_use_test.cc
+++ b/src/tint/resolver/struct_pipeline_stage_use_test.cc
@@ -53,7 +53,7 @@
 TEST_F(ResolverPipelineStageUseTest, StructUsedAsNonEntryPointReturnType) {
     auto* s = Structure("S", {Member("a", ty.f32(), {Location(0)})});
 
-    Func("foo", {}, ty.Of(s), {Return(Construct(ty.Of(s), Expr(0.f)))}, {});
+    Func("foo", {}, ty.Of(s), {Return(Construct(ty.Of(s), Expr(0_f)))}, {});
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
 
@@ -106,7 +106,7 @@
 TEST_F(ResolverPipelineStageUseTest, StructUsedAsFragmentShaderReturnType) {
     auto* s = Structure("S", {Member("a", ty.f32(), {Location(0)})});
 
-    Func("main", {}, ty.Of(s), {Return(Construct(ty.Of(s), Expr(0.f)))},
+    Func("main", {}, ty.Of(s), {Return(Construct(ty.Of(s), Expr(0_f)))},
          {Stage(ast::PipelineStage::kFragment)});
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -169,7 +169,7 @@
     auto* s = Structure("S", {Member("a", ty.f32(), {Location(0)})});
     auto* s_alias = Alias("S_alias", ty.Of(s));
 
-    Func("main", {}, ty.Of(s_alias), {Return(Construct(ty.Of(s_alias), Expr(0.f)))},
+    Func("main", {}, ty.Of(s_alias), {Return(Construct(ty.Of(s_alias), Expr(0_f)))},
          {Stage(ast::PipelineStage::kFragment)});
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
diff --git a/src/tint/resolver/type_constructor_validation_test.cc b/src/tint/resolver/type_constructor_validation_test.cc
index edfce46..4c37ee5 100644
--- a/src/tint/resolver/type_constructor_validation_test.cc
+++ b/src/tint/resolver/type_constructor_validation_test.cc
@@ -404,7 +404,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest, ConversionConstructorInvalid_TooManyInitializers) {
     auto* a = Var("a", ty.f32(), ast::StorageClass::kNone,
-                  Construct(Source{{12, 34}}, ty.f32(), Expr(1.0f), Expr(2.0f)));
+                  Construct(Source{{12, 34}}, ty.f32(), Expr(1_f), Expr(2_f)));
     WrapInFunction(a);
 
     ASSERT_FALSE(r()->Resolve());
@@ -463,7 +463,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Array_type_Mismatch_U32F32) {
     // array<u32, 3u>(0u, 1.0f, 20u);
-    auto* tc = array<u32, 3>(Expr(0_u), Expr(Source{{12, 34}}, 1.0f), Expr(20_u));
+    auto* tc = array<u32, 3>(Expr(0_u), Expr(Source{{12, 34}}, 1_f), Expr(20_u));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -650,7 +650,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Construct_f32_Success) {
-    auto* expr = Construct<f32>(Expr(1.23f));
+    auto* expr = Construct<f32>(Expr(1.23_f));
     WrapInFunction(expr);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -668,7 +668,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Convert_f32_to_i32_Success) {
-    auto* expr = Construct<i32>(1.23f);
+    auto* expr = Construct<i32>(1.23_f);
     WrapInFunction(expr);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -727,7 +727,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec2F32_Error_ScalarArgumentTypeMismatch) {
-    auto* tc = vec2<f32>(Expr(Source{{12, 34}}, 1_i), 1.0f);
+    auto* tc = vec2<f32>(Expr(Source{{12, 34}}, 1_i), 1_f);
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -788,8 +788,8 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec2_Error_TooManyArgumentsScalar) {
-    auto* tc = vec2<f32>(Expr(Source{{12, 34}}, 1.0f), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f));
+    auto* tc = vec2<f32>(Expr(Source{{12, 34}}, 1_f), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -807,7 +807,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec2_Error_TooManyArgumentsVectorAndScalar) {
-    auto* tc = vec2<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1.0f));
+    auto* tc = vec2<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -844,7 +844,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec2F32_Success_Scalar) {
-    auto* tc = vec2<f32>(1.0f, 1.0f);
+    auto* tc = vec2<f32>(1_f, 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -969,7 +969,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec3F32_Error_ScalarArgumentTypeMismatch) {
-    auto* tc = vec3<f32>(1.0f, 1.0f, Expr(Source{{12, 34}}, 1_i));
+    auto* tc = vec3<f32>(1_f, 1_f, Expr(Source{{12, 34}}, 1_i));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1021,7 +1021,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec3_Error_TooFewArgumentsScalar) {
-    auto* tc = vec3<f32>(Expr(Source{{12, 34}}, 1.0f), Expr(Source{{12, 40}}, 1.0f));
+    auto* tc = vec3<f32>(Expr(Source{{12, 34}}, 1_f), Expr(Source{{12, 40}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1029,8 +1029,8 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec3_Error_TooManyArgumentsScalar) {
-    auto* tc = vec3<f32>(Expr(Source{{12, 34}}, 1.0f), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f), Expr(Source{{12, 52}}, 1.0f));
+    auto* tc = vec3<f32>(Expr(Source{{12, 34}}, 1_f), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f), Expr(Source{{12, 52}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1056,8 +1056,8 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec3_Error_TooManyArgumentsVec2AndScalar) {
-    auto* tc = vec3<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f));
+    auto* tc = vec3<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1065,7 +1065,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec3_Error_TooManyArgumentsVec3) {
-    auto* tc = vec3<f32>(Construct(Source{{12, 34}}, ty.vec3<f32>()), Expr(Source{{12, 40}}, 1.0f));
+    auto* tc = vec3<f32>(Construct(Source{{12, 34}}, ty.vec3<f32>()), Expr(Source{{12, 40}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1102,7 +1102,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec3F32_Success_Scalar) {
-    auto* tc = vec3<f32>(1.0f, 1.0f, 1.0f);
+    auto* tc = vec3<f32>(1_f, 1_f, 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1190,7 +1190,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec3_Success_Vec2AndScalar) {
-    auto* tc = vec3<f32>(vec2<f32>(), 1.0f);
+    auto* tc = vec3<f32>(vec2<f32>(), 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1211,7 +1211,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec3_Success_ScalarAndVec2) {
-    auto* tc = vec3<f32>(1.0f, vec2<f32>());
+    auto* tc = vec3<f32>(1_f, vec2<f32>());
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1273,7 +1273,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec4F32_Error_ScalarArgumentTypeMismatch) {
-    auto* tc = vec4<f32>(1.0f, 1.0f, Expr(Source{{12, 34}}, 1_i), 1.0f);
+    auto* tc = vec4<f32>(1_f, 1_f, Expr(Source{{12, 34}}, 1_i), 1_f);
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1316,8 +1316,8 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Error_TooFewArgumentsScalar) {
-    auto* tc = vec4<f32>(Expr(Source{{12, 34}}, 1.0f), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f));
+    auto* tc = vec4<f32>(Expr(Source{{12, 34}}, 1_f), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1325,9 +1325,9 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Error_TooManyArgumentsScalar) {
-    auto* tc = vec4<f32>(Expr(Source{{12, 34}}, 1.0f), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f), Expr(Source{{12, 52}}, 1.0f),
-                         Expr(Source{{12, 58}}, 1.0f));
+    auto* tc = vec4<f32>(Expr(Source{{12, 34}}, 1_f), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f), Expr(Source{{12, 52}}, 1_f),
+                         Expr(Source{{12, 58}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1336,7 +1336,7 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec4_Error_TooFewArgumentsVec2AndScalar) {
-    auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1.0f));
+    auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1345,8 +1345,8 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec4_Error_TooManyArgumentsVec2AndScalars) {
-    auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f), Expr(Source{{12, 52}}, 1.0f));
+    auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f), Expr(Source{{12, 52}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1356,7 +1356,7 @@
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec4_Error_TooManyArgumentsVec2Vec2Scalar) {
     auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec2<f32>()),
-                         Construct(Source{{12, 40}}, ty.vec2<f32>()), Expr(Source{{12, 46}}, 1.0f));
+                         Construct(Source{{12, 40}}, ty.vec2<f32>()), Expr(Source{{12, 46}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1384,8 +1384,8 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_Vec4_Error_TooManyArgumentsVec3AndScalars) {
-    auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec3<f32>()), Expr(Source{{12, 40}}, 1.0f),
-                         Expr(Source{{12, 46}}, 1.0f));
+    auto* tc = vec4<f32>(Construct(Source{{12, 34}}, ty.vec3<f32>()), Expr(Source{{12, 40}}, 1_f),
+                         Expr(Source{{12, 46}}, 1_f));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1445,7 +1445,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4F32_Success_Scalar) {
-    auto* tc = vec4<f32>(1.0f, 1.0f, 1.0f, 1.0f);
+    auto* tc = vec4<f32>(1_f, 1_f, 1_f, 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1493,7 +1493,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Success_Vec2ScalarScalar) {
-    auto* tc = vec4<f32>(vec2<f32>(), 1.0f, 1.0f);
+    auto* tc = vec4<f32>(vec2<f32>(), 1_f, 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1505,7 +1505,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Success_ScalarVec2Scalar) {
-    auto* tc = vec4<f32>(1.0f, vec2<f32>(), 1.0f);
+    auto* tc = vec4<f32>(1_f, vec2<f32>(), 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1517,7 +1517,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Success_ScalarScalarVec2) {
-    auto* tc = vec4<f32>(1.0f, 1.0f, vec2<f32>());
+    auto* tc = vec4<f32>(1_f, 1_f, vec2<f32>());
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1541,7 +1541,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Success_Vec3AndScalar) {
-    auto* tc = vec4<f32>(vec3<f32>(), 1.0f);
+    auto* tc = vec4<f32>(vec3<f32>(), 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1553,7 +1553,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_Vec4_Success_ScalarAndVec3) {
-    auto* tc = vec4<f32>(1.0f, vec3<f32>());
+    auto* tc = vec4<f32>(1_f, vec3<f32>());
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1590,10 +1590,9 @@
 
 TEST_F(ResolverTypeConstructorValidationTest,
        Expr_Constructor_NestedVectorConstructors_InnerError) {
-    auto* tc =
-        vec4<f32>(vec4<f32>(1.0f, 1.0f,
-                            vec3<f32>(Expr(Source{{12, 34}}, 1.0f), Expr(Source{{12, 34}}, 1.0f))),
-                  1.0f);
+    auto* tc = vec4<f32>(
+        vec4<f32>(1_f, 1_f, vec3<f32>(Expr(Source{{12, 34}}, 1_f), Expr(Source{{12, 34}}, 1_f))),
+        1_f);
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1601,7 +1600,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, Expr_Constructor_NestedVectorConstructors_Success) {
-    auto* tc = vec4<f32>(vec3<f32>(vec2<f32>(1.0f, 1.0f), 1.0f), 1.0f);
+    auto* tc = vec4<f32>(vec3<f32>(vec2<f32>(1_f, 1_f), 1_f), 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1641,7 +1640,7 @@
 
     // vec2<Float32>(1.0f, 1u)
     auto* vec_type = ty.vec(ty.Of(f32_alias), 2);
-    auto* tc = Construct(Source{{12, 34}}, vec_type, 1.0f, Expr(Source{{12, 40}}, 1_u));
+    auto* tc = Construct(Source{{12, 34}}, vec_type, 1_f, Expr(Source{{12, 40}}, 1_u));
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1655,7 +1654,7 @@
 
     // vec2<Float32>(1.0f, 1.0f)
     auto* vec_type = ty.vec(ty.Of(f32_alias), 2);
-    auto* tc = Construct(Source{{12, 34}}, vec_type, 1.0f, 1.0f);
+    auto* tc = Construct(Source{{12, 34}}, vec_type, 1_f, 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1667,7 +1666,7 @@
 
     // vec3<u32>(vec<Float32>(), 1.0f)
     auto* vec_type = ty.vec(ty.Of(f32_alias), 2);
-    auto* tc = vec3<u32>(Construct(Source{{12, 34}}, vec_type), 1.0f);
+    auto* tc = vec3<u32>(Construct(Source{{12, 34}}, vec_type), 1_f);
     WrapInFunction(tc);
 
     EXPECT_FALSE(r()->Resolve());
@@ -1682,7 +1681,7 @@
 
     // vec3<f32>(vec<Float32>(), 1.0f)
     auto* vec_type = ty.vec(ty.Of(f32_alias), 2);
-    auto* tc = vec3<f32>(Construct(Source{{12, 34}}, vec_type), 1.0f);
+    auto* tc = vec3<f32>(Construct(Source{{12, 34}}, vec_type), 1_f);
     WrapInFunction(tc);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1692,7 +1691,7 @@
     auto* vec2_bool = Construct(create<ast::Vector>(nullptr, 2), Expr(true), Expr(false));
     auto* vec2_i32 = Construct(create<ast::Vector>(nullptr, 2), Expr(1_i), Expr(2_i));
     auto* vec2_u32 = Construct(create<ast::Vector>(nullptr, 2), Expr(1_u), Expr(2_u));
-    auto* vec2_f32 = Construct(create<ast::Vector>(nullptr, 2), Expr(1.0f), Expr(2.0f));
+    auto* vec2_f32 = Construct(create<ast::Vector>(nullptr, 2), Expr(1_f), Expr(2_f));
     WrapInFunction(vec2_bool, vec2_i32, vec2_u32, vec2_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1719,7 +1718,7 @@
     auto* vec2_bool = Construct(create<ast::Vector>(nullptr, 2), vec2<bool>(true, false));
     auto* vec2_i32 = Construct(create<ast::Vector>(nullptr, 2), vec2<i32>(1_i, 2_i));
     auto* vec2_u32 = Construct(create<ast::Vector>(nullptr, 2), vec2<u32>(1_u, 2_u));
-    auto* vec2_f32 = Construct(create<ast::Vector>(nullptr, 2), vec2<f32>(1.0f, 2.0f));
+    auto* vec2_f32 = Construct(create<ast::Vector>(nullptr, 2), vec2<f32>(1_f, 2_f));
     WrapInFunction(vec2_bool, vec2_i32, vec2_u32, vec2_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1747,7 +1746,7 @@
         Construct(create<ast::Vector>(nullptr, 3), Expr(true), Expr(false), Expr(true));
     auto* vec3_i32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1_i), Expr(2_i), Expr(3_i));
     auto* vec3_u32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1_u), Expr(2_u), Expr(3_u));
-    auto* vec3_f32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1.0f), Expr(2.0f), Expr(3.0f));
+    auto* vec3_f32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1_f), Expr(2_f), Expr(3_f));
     WrapInFunction(vec3_bool, vec3_i32, vec3_u32, vec3_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1774,7 +1773,7 @@
     auto* vec3_bool = Construct(create<ast::Vector>(nullptr, 3), vec3<bool>(true, false, true));
     auto* vec3_i32 = Construct(create<ast::Vector>(nullptr, 3), vec3<i32>(1_i, 2_i, 3_i));
     auto* vec3_u32 = Construct(create<ast::Vector>(nullptr, 3), vec3<u32>(1_u, 2_u, 3_u));
-    auto* vec3_f32 = Construct(create<ast::Vector>(nullptr, 3), vec3<f32>(1.0f, 2.0f, 3.0f));
+    auto* vec3_f32 = Construct(create<ast::Vector>(nullptr, 3), vec3<f32>(1_f, 2_f, 3_f));
     WrapInFunction(vec3_bool, vec3_i32, vec3_u32, vec3_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1802,7 +1801,7 @@
         Construct(create<ast::Vector>(nullptr, 3), Expr(true), vec2<bool>(false, true));
     auto* vec3_i32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1_i), vec2<i32>(2_i, 3_i));
     auto* vec3_u32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1_u), vec2<u32>(2_u, 3_u));
-    auto* vec3_f32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1.0f), vec2<f32>(2.0f, 3.0f));
+    auto* vec3_f32 = Construct(create<ast::Vector>(nullptr, 3), Expr(1_f), vec2<f32>(2_f, 3_f));
     WrapInFunction(vec3_bool, vec3_i32, vec3_u32, vec3_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1833,7 +1832,7 @@
     auto* vec4_u32 =
         Construct(create<ast::Vector>(nullptr, 4), Expr(1_u), Expr(2_u), Expr(3_u), Expr(4_u));
     auto* vec4_f32 =
-        Construct(create<ast::Vector>(nullptr, 4), Expr(1.0f), Expr(2.0f), Expr(3.0f), Expr(4.0f));
+        Construct(create<ast::Vector>(nullptr, 4), Expr(1_f), Expr(2_f), Expr(3_f), Expr(4_f));
     WrapInFunction(vec4_bool, vec4_i32, vec4_u32, vec4_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1861,7 +1860,7 @@
         Construct(create<ast::Vector>(nullptr, 4), vec4<bool>(true, false, true, false));
     auto* vec4_i32 = Construct(create<ast::Vector>(nullptr, 4), vec4<i32>(1_i, 2_i, 3_i, 4_i));
     auto* vec4_u32 = Construct(create<ast::Vector>(nullptr, 4), vec4<u32>(1_u, 2_u, 3_u, 4_u));
-    auto* vec4_f32 = Construct(create<ast::Vector>(nullptr, 4), vec4<f32>(1.0f, 2.0f, 3.0f, 4.0f));
+    auto* vec4_f32 = Construct(create<ast::Vector>(nullptr, 4), vec4<f32>(1_f, 2_f, 3_f, 4_f));
     WrapInFunction(vec4_bool, vec4_i32, vec4_u32, vec4_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1892,7 +1891,7 @@
     auto* vec4_u32 =
         Construct(create<ast::Vector>(nullptr, 4), Expr(1_u), vec3<u32>(2_u, 3_u, 4_u));
     auto* vec4_f32 =
-        Construct(create<ast::Vector>(nullptr, 4), Expr(1.0f), vec3<f32>(2.0f, 3.0f, 4.0f));
+        Construct(create<ast::Vector>(nullptr, 4), Expr(1_f), vec3<f32>(2_f, 3_f, 4_f));
     WrapInFunction(vec4_bool, vec4_i32, vec4_u32, vec4_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1923,7 +1922,7 @@
     auto* vec4_u32 =
         Construct(create<ast::Vector>(nullptr, 4), vec2<u32>(1_u, 2_u), vec2<u32>(3_u, 4_u));
     auto* vec4_f32 =
-        Construct(create<ast::Vector>(nullptr, 4), vec2<f32>(1.0f, 2.0f), vec2<f32>(3.0f, 4.0f));
+        Construct(create<ast::Vector>(nullptr, 4), vec2<f32>(1_f, 2_f), vec2<f32>(3_f, 4_f));
     WrapInFunction(vec4_bool, vec4_i32, vec4_u32, vec4_f32);
 
     ASSERT_TRUE(r()->Resolve()) << r()->error();
@@ -1984,7 +1983,7 @@
 TEST_F(ResolverTypeConstructorValidationTest, CannotInferVec3ElementTypeFromScalarAndVec2Mismatch) {
     WrapInFunction(Construct(Source{{1, 1}}, create<ast::Vector>(nullptr, 3),
                              Expr(Source{{1, 2}}, 1_i),  //
-                             Construct(Source{{1, 3}}, ty.vec2<f32>(), 2.0f, 3.0f)));
+                             Construct(Source{{1, 3}}, ty.vec2<f32>(), 2_f, 3_f)));
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(
@@ -1996,9 +1995,9 @@
 
 TEST_F(ResolverTypeConstructorValidationTest, CannotInferVec4ElementTypeFromScalarsMismatch) {
     WrapInFunction(Construct(Source{{1, 1}}, create<ast::Vector>(nullptr, 4),
-                             Expr(Source{{1, 2}}, 1_i),   //
-                             Expr(Source{{1, 3}}, 2_i),   //
-                             Expr(Source{{1, 4}}, 3.0f),  //
+                             Expr(Source{{1, 2}}, 1_i),  //
+                             Expr(Source{{1, 3}}, 2_i),  //
+                             Expr(Source{{1, 4}}, 3_f),  //
                              Expr(Source{{1, 5}}, 4_i)));
 
     EXPECT_FALSE(r()->Resolve());
@@ -2720,7 +2719,7 @@
 }
 
 TEST_F(ResolverTypeConstructorValidationTest, TypeConstructorAsStatement) {
-    WrapInFunction(CallStmt(Construct(Source{{12, 34}}, ty.vec2<f32>(), 1.f, 2.f)));
+    WrapInFunction(CallStmt(Construct(Source{{12, 34}}, ty.vec2<f32>(), 1_f, 2_f)));
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: type constructor evaluated but not used");
diff --git a/src/tint/resolver/type_validation_test.cc b/src/tint/resolver/type_validation_test.cc
index 2af2c0e..90e18e1 100644
--- a/src/tint/resolver/type_validation_test.cc
+++ b/src/tint/resolver/type_validation_test.cc
@@ -91,7 +91,7 @@
     // const<private> global_var: f32;
     AST().AddGlobalVariable(create<ast::Variable>(
         Source{{12, 34}}, Symbols().Register("global_var"), ast::StorageClass::kPrivate,
-        ast::Access::kUndefined, ty.f32(), true, false, Expr(1.23f), ast::AttributeList{}));
+        ast::Access::kUndefined, ty.f32(), true, false, Expr(1.23_f), ast::AttributeList{}));
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: global constants shouldn't have a storage class");
@@ -108,9 +108,9 @@
     // var global_var0 : f32 = 0.1;
     // var global_var1 : i32 = 0;
 
-    Global("global_var0", ty.f32(), ast::StorageClass::kPrivate, Expr(0.1f));
+    Global("global_var0", ty.f32(), ast::StorageClass::kPrivate, Expr(0.1_f));
 
-    Global(Source{{12, 34}}, "global_var1", ty.f32(), ast::StorageClass::kPrivate, Expr(1.0f));
+    Global(Source{{12, 34}}, "global_var1", ty.f32(), ast::StorageClass::kPrivate, Expr(1_f));
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
@@ -121,11 +121,11 @@
     // }
     // var a: f32 = 2.1;
 
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
 
     Func("my_func", ast::VariableList{}, ty.void_(), {Decl(var)});
 
-    Global("a", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1f));
+    Global("a", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1_f));
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
@@ -135,12 +135,12 @@
     // if (true) { var a : f32 = 2.0; }
     // var a : f32 = 3.14;
     // }
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
 
     auto* cond = Expr(true);
     auto* body = Block(Decl(var));
 
-    auto* var_a_float = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(3.1f));
+    auto* var_a_float = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(3.1_f));
 
     auto* outer_body = Block(If(cond, body), Decl(Source{{12, 34}}, var_a_float));
 
@@ -168,9 +168,9 @@
 TEST_F(ResolverTypeValidationTest, RedeclaredIdentifierDifferentFunctions_Pass) {
     // func0 { var a : f32 = 2.0; return; }
     // func1 { var a : f32 = 3.0; return; }
-    auto* var0 = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var0 = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
 
-    auto* var1 = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(1.0f));
+    auto* var1 = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(1_f));
 
     Func("func0", ast::VariableList{}, ty.void_(),
          ast::StatementList{
@@ -232,7 +232,7 @@
 
 TEST_F(ResolverTypeValidationTest, ArraySize_SignedLiteral_Negative) {
     // var<private> a : array<f32, -10i>;
-    Global("a", ty.array(ty.f32(), Expr(Source{{12, 34}}, i32(-10))), ast::StorageClass::kPrivate);
+    Global("a", ty.array(ty.f32(), Expr(Source{{12, 34}}, -10_i)), ast::StorageClass::kPrivate);
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: array size must be at least 1");
 }
@@ -258,7 +258,7 @@
 TEST_F(ResolverTypeValidationTest, ArraySize_SignedConstant_Negative) {
     // let size = -10i;
     // var<private> a : array<f32, size>;
-    GlobalConst("size", nullptr, Expr(i32(-10)));
+    GlobalConst("size", nullptr, Expr(-10_i));
     Global("a", ty.array(ty.f32(), Expr(Source{{12, 34}}, "size")), ast::StorageClass::kPrivate);
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: array size must be at least 1");
@@ -266,7 +266,7 @@
 
 TEST_F(ResolverTypeValidationTest, ArraySize_FloatLiteral) {
     // var<private> a : array<f32, 10.0>;
-    Global("a", ty.array(ty.f32(), Expr(Source{{12, 34}}, 10.f)), ast::StorageClass::kPrivate);
+    Global("a", ty.array(ty.f32(), Expr(Source{{12, 34}}, 10_f)), ast::StorageClass::kPrivate);
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: array size must be integer scalar");
 }
@@ -282,7 +282,7 @@
 TEST_F(ResolverTypeValidationTest, ArraySize_FloatConstant) {
     // let size = 10.0;
     // var<private> a : array<f32, size>;
-    GlobalConst("size", nullptr, Expr(10.f));
+    GlobalConst("size", nullptr, Expr(10_f));
     Global("a", ty.array(ty.f32(), Expr(Source{{12, 34}}, "size")), ast::StorageClass::kPrivate);
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: array size must be integer scalar");
diff --git a/src/tint/resolver/validation_test.cc b/src/tint/resolver/validation_test.cc
index 65d73c4..9270065 100644
--- a/src/tint/resolver/validation_test.cc
+++ b/src/tint/resolver/validation_test.cc
@@ -116,7 +116,7 @@
 TEST_F(ResolverValidationTest, Stmt_If_NonBool) {
     // if (1.23f) {}
 
-    WrapInFunction(If(Expr(Source{{12, 34}}, 1.23f), Block()));
+    WrapInFunction(If(Expr(Source{{12, 34}}, 1.23_f), Block()));
 
     EXPECT_FALSE(r()->Resolve());
 
@@ -126,7 +126,7 @@
 TEST_F(ResolverValidationTest, Stmt_ElseIf_NonBool) {
     // else if (1.23f) {}
 
-    WrapInFunction(If(Expr(true), Block(), Else(If(Expr(Source{{12, 34}}, 1.23f), Block()))));
+    WrapInFunction(If(Expr(true), Block(), Else(If(Expr(Source{{12, 34}}, 1.23_f), Block()))));
 
     EXPECT_FALSE(r()->Resolve());
 
@@ -213,11 +213,11 @@
     //   return;
     // }
 
-    Global("global_var", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1f));
+    Global("global_var", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1_f));
 
     Func("my_func", ast::VariableList{}, ty.void_(),
          {
-             Assign(Expr(Source{{12, 34}}, "global_var"), 3.14f),
+             Assign(Expr(Source{{12, 34}}, "global_var"), 3.14_f),
              Return(),
          });
 
@@ -229,14 +229,14 @@
     //   if (true) { var a : f32 = 2.0; }
     //   a = 3.14;
     // }
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
 
     auto* cond = Expr(true);
     auto* body = Block(Decl(var));
 
     SetSource(Source{{12, 34}});
     auto* lhs = Expr(Source{{12, 34}}, "a");
-    auto* rhs = Expr(3.14f);
+    auto* rhs = Expr(3.14_f);
 
     auto* outer_body = Block(If(cond, body), Assign(lhs, rhs));
 
@@ -251,10 +251,10 @@
     //   var a : f32 = 2.0;
     //   if (true) { a = 3.14; }
     // }
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
 
     auto* lhs = Expr(Source{{12, 34}}, "a");
-    auto* rhs = Expr(3.14f);
+    auto* rhs = Expr(3.14_f);
 
     auto* cond = Expr(true);
     auto* body = Block(Assign(lhs, rhs));
@@ -271,11 +271,11 @@
     //  { var a : f32 = 2.0; }
     //  { a = 3.14; }
     // }
-    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var = Var("a", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
     auto* first_body = Block(Decl(var));
 
     auto* lhs = Expr(Source{{12, 34}}, "a");
-    auto* rhs = Expr(3.14f);
+    auto* rhs = Expr(3.14_f);
     auto* second_body = Block(Assign(lhs, rhs));
 
     auto* outer_body = Block(first_body, second_body);
@@ -966,7 +966,7 @@
     // for (; 1.0f; ) {
     // }
 
-    WrapInFunction(For(nullptr, Expr(Source{{12, 34}}, 1.0f), nullptr, Block()));
+    WrapInFunction(For(nullptr, Expr(Source{{12, 34}}, 1_f), nullptr, Block()));
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(), "12:34 error: for-loop condition must be bool, got f32");
diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc
index a97c2bd..f9b0ba7 100644
--- a/src/tint/resolver/validator.cc
+++ b/src/tint/resolver/validator.cc
@@ -1517,6 +1517,28 @@
            check_arg_is_constexpr(sem::ParameterUsage::kComponent, 0, 3);
 }
 
+bool Validator::RequiredExtensionForBuiltinFunction(const sem::Call* call,
+                                                    const ast::ExtensionSet& extensionSet) const {
+    const auto* builtin = call->Target()->As<sem::Builtin>();
+    if (!builtin) {
+        return true;
+    }
+
+    const auto extension = builtin->RequiredExtension();
+    if (extension == ast::Enable::ExtensionKind::kNotAnExtension) {
+        return true;
+    }
+
+    if (extensionSet.find(extension) == extensionSet.cend()) {
+        AddError("cannot call built-in function '" + std::string(builtin->str()) +
+                     "' without extension " + ast::Enable::KindToName(extension),
+                 call->Declaration()->source);
+        return false;
+    }
+
+    return true;
+}
+
 bool Validator::FunctionCall(const sem::Call* call, sem::Statement* current_statement) const {
     auto* decl = call->Declaration();
     auto* target = call->Target()->As<sem::Function>();
diff --git a/src/tint/resolver/validator.h b/src/tint/resolver/validator.h
index 9901dc9..21c8e70 100644
--- a/src/tint/resolver/validator.h
+++ b/src/tint/resolver/validator.h
@@ -373,6 +373,13 @@
     /// @returns true on success, false otherwise
     bool TextureBuiltinFunction(const sem::Call* call) const;
 
+    /// Validates an optional builtin function and its required extension.
+    /// @param call the builtin call to validate
+    /// @param extensionSet all the extensions declared in current module
+    /// @returns true on success, false otherwise
+    bool RequiredExtensionForBuiltinFunction(const sem::Call* call,
+                                             const ast::ExtensionSet& extensionSet) const;
+
     /// Validates there are no duplicate attributes
     /// @param attributes the list of attributes to validate
     /// @returns true on success, false otherwise.
diff --git a/src/tint/resolver/var_let_test.cc b/src/tint/resolver/var_let_test.cc
index a59855a..4c62bdd 100644
--- a/src/tint/resolver/var_let_test.cc
+++ b/src/tint/resolver/var_let_test.cc
@@ -99,7 +99,7 @@
 
     auto* i_c = Expr(1_i);
     auto* u_c = Expr(1_u);
-    auto* f_c = Expr(1.f);
+    auto* f_c = Expr(1_f);
     auto* b_c = Expr(true);
     auto* s_c = Construct(ty.Of(S), Expr(1_i));
     auto* a_c = Construct(ty.Of(A), Expr(1_i));
@@ -165,7 +165,7 @@
 
     auto* i_c = Expr(1_i);
     auto* u_c = Expr(1_u);
-    auto* f_c = Expr(1.f);
+    auto* f_c = Expr(1_f);
     auto* b_c = Expr(true);
     auto* s_c = Construct(ty.Of(S), Expr(1_i));
     auto* a_c = Construct(ty.Of(A), Expr(1_i));
diff --git a/src/tint/resolver/var_let_validation_test.cc b/src/tint/resolver/var_let_validation_test.cc
index ff63918..e1dc343 100644
--- a/src/tint/resolver/var_let_validation_test.cc
+++ b/src/tint/resolver/var_let_validation_test.cc
@@ -127,7 +127,7 @@
     // let b : ptr<function,f32> = a;
     const auto priv = ast::StorageClass::kFunction;
     auto* var_a = Var("a", ty.f32(), priv);
-    auto* var_b = Let(Source{{12, 34}}, "b", ty.pointer<float>(priv), Expr("a"), {});
+    auto* var_b = Let(Source{{12, 34}}, "b", ty.pointer<f32>(priv), Expr("a"), {});
     WrapInFunction(var_a, var_b);
 
     ASSERT_FALSE(r()->Resolve());
@@ -140,7 +140,7 @@
 TEST_F(ResolverVarLetValidationTest, LocalLetRedeclared) {
     // let l : f32 = 1.;
     // let l : i32 = 0;
-    auto* l1 = Let("l", ty.f32(), Expr(1.f));
+    auto* l1 = Let("l", ty.f32(), Expr(1_f));
     auto* l2 = Let(Source{{12, 34}}, "l", ty.i32(), Expr(0_i));
     WrapInFunction(l1, l2);
 
@@ -156,9 +156,9 @@
     //   return 0;
     // }
 
-    Global("v", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1f));
+    Global("v", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1_f));
 
-    WrapInFunction(Var(Source{{12, 34}}, "v", ty.f32(), ast::StorageClass::kNone, Expr(2.0f)));
+    WrapInFunction(Var(Source{{12, 34}}, "v", ty.f32(), ast::StorageClass::kNone, Expr(2_f)));
 
     EXPECT_TRUE(r()->Resolve()) << r()->error();
 }
@@ -183,9 +183,9 @@
     //   var v : f32 = 3.14;
     //   if (true) { var v : f32 = 2.0; }
     // }
-    auto* var_a_float = Var("v", ty.f32(), ast::StorageClass::kNone, Expr(3.1f));
+    auto* var_a_float = Var("v", ty.f32(), ast::StorageClass::kNone, Expr(3.1_f));
 
-    auto* var = Var(Source{{12, 34}}, "v", ty.f32(), ast::StorageClass::kNone, Expr(2.0f));
+    auto* var = Var(Source{{12, 34}}, "v", ty.f32(), ast::StorageClass::kNone, Expr(2_f));
 
     auto* cond = Expr(true);
     auto* body = Block(Decl(var));
@@ -274,7 +274,7 @@
 
 TEST_F(ResolverVarLetValidationTest, InvalidStorageClassForInitializer) {
     // var<workgroup> v : f32 = 1.23;
-    Global(Source{{12, 34}}, "v", ty.f32(), ast::StorageClass::kWorkgroup, Expr(1.23f));
+    Global(Source{{12, 34}}, "v", ty.f32(), ast::StorageClass::kWorkgroup, Expr(1.23_f));
 
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
diff --git a/src/tint/sem/builtin.cc b/src/tint/sem/builtin.cc
index 66b5b27..0328a64 100644
--- a/src/tint/sem/builtin.cc
+++ b/src/tint/sem/builtin.cc
@@ -145,6 +145,16 @@
     return false;
 }
 
+ast::Enable::ExtensionKind Builtin::RequiredExtension() const {
+    switch (type_) {
+        case sem::BuiltinType::kDot4I8Packed:
+        case sem::BuiltinType::kDot4U8Packed:
+            return ast::Enable::ExtensionKind::kChromiumExperimentalDP4a;
+        default:
+            return ast::Enable::ExtensionKind::kNotAnExtension;
+    }
+}
+
 }  // namespace tint::sem
 
 //! @endcond
diff --git a/src/tint/sem/builtin.h b/src/tint/sem/builtin.h
index d742f95..8d3e2bd 100644
--- a/src/tint/sem/builtin.h
+++ b/src/tint/sem/builtin.h
@@ -134,6 +134,10 @@
     /// one of its inputs)
     bool HasSideEffects() const;
 
+    /// @returns the required extension of this builtin function. Returns
+    /// ast::Enable::ExtensionKind::kNotAnExtension if no extension is required.
+    ast::Enable::ExtensionKind RequiredExtension() const;
+
   private:
     const BuiltinType type_;
     const PipelineStageSet supported_stages_;
diff --git a/src/tint/sem/builtin_test.cc b/src/tint/sem/builtin_test.cc
index f3cbae3..cf14565 100644
--- a/src/tint/sem/builtin_test.cc
+++ b/src/tint/sem/builtin_test.cc
@@ -56,6 +56,8 @@
                     BuiltinData{"determinant", BuiltinType::kDeterminant},
                     BuiltinData{"distance", BuiltinType::kDistance},
                     BuiltinData{"dot", BuiltinType::kDot},
+                    BuiltinData{"dot4I8Packed", BuiltinType::kDot4I8Packed},
+                    BuiltinData{"dot4U8Packed", BuiltinType::kDot4U8Packed},
                     BuiltinData{"dpdx", BuiltinType::kDpdx},
                     BuiltinData{"dpdxCoarse", BuiltinType::kDpdxCoarse},
                     BuiltinData{"dpdxFine", BuiltinType::kDpdxFine},
diff --git a/src/tint/sem/builtin_type.cc b/src/tint/sem/builtin_type.cc
index 49ee000..8707369 100644
--- a/src/tint/sem/builtin_type.cc
+++ b/src/tint/sem/builtin_type.cc
@@ -89,6 +89,12 @@
     if (name == "dot") {
         return BuiltinType::kDot;
     }
+    if (name == "dot4I8Packed") {
+        return BuiltinType::kDot4I8Packed;
+    }
+    if (name == "dot4U8Packed") {
+        return BuiltinType::kDot4U8Packed;
+    }
     if (name == "dpdx") {
         return BuiltinType::kDpdx;
     }
@@ -391,6 +397,10 @@
             return "distance";
         case BuiltinType::kDot:
             return "dot";
+        case BuiltinType::kDot4I8Packed:
+            return "dot4I8Packed";
+        case BuiltinType::kDot4U8Packed:
+            return "dot4U8Packed";
         case BuiltinType::kDpdx:
             return "dpdx";
         case BuiltinType::kDpdxCoarse:
diff --git a/src/tint/sem/builtin_type.h b/src/tint/sem/builtin_type.h
index 780f9c5..96d3c30 100644
--- a/src/tint/sem/builtin_type.h
+++ b/src/tint/sem/builtin_type.h
@@ -53,6 +53,8 @@
     kDeterminant,
     kDistance,
     kDot,
+    kDot4I8Packed,
+    kDot4U8Packed,
     kDpdx,
     kDpdxCoarse,
     kDpdxFine,
diff --git a/src/tint/transform/canonicalize_entry_point_io.cc b/src/tint/transform/canonicalize_entry_point_io.cc
index aeafa1b..44d577b 100644
--- a/src/tint/transform/canonicalize_entry_point_io.cc
+++ b/src/tint/transform/canonicalize_entry_point_io.cc
@@ -374,7 +374,7 @@
     void AddVertexPointSize() {
         // Create a new output value and assign it a literal 1.0 value.
         AddOutput("vertex_point_size", ctx.dst->create<sem::F32>(),
-                  {ctx.dst->Builtin(ast::Builtin::kPointSize)}, ctx.dst->Expr(1.f));
+                  {ctx.dst->Builtin(ast::Builtin::kPointSize)}, ctx.dst->Expr(1_f));
     }
 
     /// Create an expression for gl_Position.[component]
@@ -580,7 +580,7 @@
                 ctx.dst->create<ast::UnaryOpExpression>(ast::UnaryOp::kNegation, GLPosition("y"));
             wrapper_body.push_back(ctx.dst->Assign(pos_y, negate_pos_y));
 
-            auto* two_z = ctx.dst->Mul(ctx.dst->Expr(2.0f), GLPosition("z"));
+            auto* two_z = ctx.dst->Mul(ctx.dst->Expr(2_f), GLPosition("z"));
             auto* fixed_z = ctx.dst->Sub(two_z, GLPosition("w"));
             wrapper_body.push_back(ctx.dst->Assign(GLPosition("z"), fixed_z));
         }
diff --git a/src/tint/transform/decompose_strided_array_test.cc b/src/tint/transform/decompose_strided_array_test.cc
index cd9d63c..53b335e 100644
--- a/src/tint/transform/decompose_strided_array_test.cc
+++ b/src/tint/transform/decompose_strided_array_test.cc
@@ -350,8 +350,8 @@
            {
                b.Assign(b.MemberAccessor("s", "a"), b.Construct(b.ty.array<f32, 4u>(32))),
                b.Assign(b.MemberAccessor("s", "a"),
-                        b.Construct(b.ty.array<f32, 4u>(32), 1.0f, 2.0f, 3.0f, 4.0f)),
-               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i), 5.0f),
+                        b.Construct(b.ty.array<f32, 4u>(32), 1_f, 2_f, 3_f, 4_f)),
+               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i), 5_f),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
@@ -404,8 +404,8 @@
            {
                b.Assign(b.MemberAccessor("s", "a"), b.Construct(b.ty.array<f32, 4u>(4))),
                b.Assign(b.MemberAccessor("s", "a"),
-                        b.Construct(b.ty.array<f32, 4u>(4), 1.0f, 2.0f, 3.0f, 4.0f)),
-               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i), 5.0f),
+                        b.Construct(b.ty.array<f32, 4u>(4), 1_f, 2_f, 3_f, 4_f)),
+               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i), 5_f),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
@@ -458,8 +458,8 @@
                b.Decl(b.Let("b", nullptr, b.AddressOf(b.Deref(b.AddressOf(b.Deref("a")))))),
                b.Decl(b.Let("c", nullptr, b.Deref("b"))),
                b.Decl(b.Let("d", nullptr, b.IndexAccessor(b.Deref("b"), 1_i))),
-               b.Assign(b.Deref("b"), b.Construct(b.ty.array<f32, 4u>(32), 1.0f, 2.0f, 3.0f, 4.0f)),
-               b.Assign(b.IndexAccessor(b.Deref("b"), 1_i), 5.0f),
+               b.Assign(b.Deref("b"), b.Construct(b.ty.array<f32, 4u>(32), 1_f, 2_f, 3_f, 4_f)),
+               b.Assign(b.IndexAccessor(b.Deref("b"), 1_i), 5_f),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
@@ -519,8 +519,8 @@
                b.Decl(b.Let("b", b.ty.f32(), b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i))),
                b.Assign(b.MemberAccessor("s", "a"), b.Construct(b.ty.type_name("ARR"))),
                b.Assign(b.MemberAccessor("s", "a"),
-                        b.Construct(b.ty.type_name("ARR"), 1.0f, 2.0f, 3.0f, 4.0f)),
-               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i), 5.0f),
+                        b.Construct(b.ty.type_name("ARR"), 1_f, 2_f, 3_f, 4_f)),
+               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "a"), 1_i), 5_f),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
@@ -612,7 +612,7 @@
                                     3_i),
                                 2_i),
                             1_i),
-                        5.0f),
+                        5_f),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
diff --git a/src/tint/transform/decompose_strided_matrix_test.cc b/src/tint/transform/decompose_strided_matrix_test.cc
index 23b30d5..803ae73 100644
--- a/src/tint/transform/decompose_strided_matrix_test.cc
+++ b/src/tint/transform/decompose_strided_matrix_test.cc
@@ -354,7 +354,7 @@
     b.Func("f", {}, b.ty.void_(),
            {
                b.Assign(b.MemberAccessor("s", "m"),
-                        b.mat2x2<f32>(b.vec2<f32>(1.0f, 2.0f), b.vec2<f32>(3.0f, 4.0f))),
+                        b.mat2x2<f32>(b.vec2<f32>(1_f, 2_f), b.vec2<f32>(3_f, 4_f))),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
@@ -411,7 +411,7 @@
              b.GroupAndBinding(0, 0));
     b.Func("f", {}, b.ty.void_(),
            {
-               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "m"), 1_i), b.vec2<f32>(1.0f, 2.0f)),
+               b.Assign(b.IndexAccessor(b.MemberAccessor("s", "m"), 1_i), b.vec2<f32>(1_f, 2_f)),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
@@ -468,21 +468,20 @@
              });
     b.Global("s", b.ty.Of(S), ast::StorageClass::kStorage, ast::Access::kReadWrite,
              b.GroupAndBinding(0, 0));
-    b.Func(
-        "f", {}, b.ty.void_(),
-        {
-            b.Decl(b.Let("a", nullptr, b.AddressOf(b.MemberAccessor("s", "m")))),
-            b.Decl(b.Let("b", nullptr, b.AddressOf(b.Deref(b.AddressOf(b.Deref("a")))))),
-            b.Decl(b.Let("x", nullptr, b.Deref("b"))),
-            b.Decl(b.Let("y", nullptr, b.IndexAccessor(b.Deref("b"), 1_i))),
-            b.Decl(b.Let("z", nullptr, b.IndexAccessor("x", 1_i))),
-            b.Assign(b.Deref("b"), b.mat2x2<f32>(b.vec2<f32>(1.0f, 2.0f), b.vec2<f32>(3.0f, 4.0f))),
-            b.Assign(b.IndexAccessor(b.Deref("b"), 1_i), b.vec2<f32>(5.0f, 6.0f)),
-        },
-        {
-            b.Stage(ast::PipelineStage::kCompute),
-            b.WorkgroupSize(1_i),
-        });
+    b.Func("f", {}, b.ty.void_(),
+           {
+               b.Decl(b.Let("a", nullptr, b.AddressOf(b.MemberAccessor("s", "m")))),
+               b.Decl(b.Let("b", nullptr, b.AddressOf(b.Deref(b.AddressOf(b.Deref("a")))))),
+               b.Decl(b.Let("x", nullptr, b.Deref("b"))),
+               b.Decl(b.Let("y", nullptr, b.IndexAccessor(b.Deref("b"), 1_i))),
+               b.Decl(b.Let("z", nullptr, b.IndexAccessor("x", 1_i))),
+               b.Assign(b.Deref("b"), b.mat2x2<f32>(b.vec2<f32>(1_f, 2_f), b.vec2<f32>(3_f, 4_f))),
+               b.Assign(b.IndexAccessor(b.Deref("b"), 1_i), b.vec2<f32>(5_f, 6_f)),
+           },
+           {
+               b.Stage(ast::PipelineStage::kCompute),
+               b.WorkgroupSize(1_i),
+           });
 
     auto* expect = R"(
 struct S {
@@ -595,7 +594,7 @@
     b.Func("f", {}, b.ty.void_(),
            {
                b.Assign(b.MemberAccessor("s", "m"),
-                        b.mat2x2<f32>(b.vec2<f32>(1.0f, 2.0f), b.vec2<f32>(3.0f, 4.0f))),
+                        b.mat2x2<f32>(b.vec2<f32>(1_f, 2_f), b.vec2<f32>(3_f, 4_f))),
            },
            {
                b.Stage(ast::PipelineStage::kCompute),
diff --git a/src/tint/transform/multiplanar_external_texture.cc b/src/tint/transform/multiplanar_external_texture.cc
index 47cc9ce..0bc507e 100644
--- a/src/tint/transform/multiplanar_external_texture.cc
+++ b/src/tint/transform/multiplanar_external_texture.cc
@@ -304,11 +304,11 @@
         const ast::CallExpression* plane_1_call = nullptr;
         if (call_type == sem::BuiltinType::kTextureSampleLevel) {
             // textureSampleLevel(plane0, smp, coord.xy, 0.0);
-            single_plane_call = b.Call("textureSampleLevel", "plane0", "smp", "coord", 0.0f);
+            single_plane_call = b.Call("textureSampleLevel", "plane0", "smp", "coord", 0_f);
             // textureSampleLevel(plane0, smp, coord.xy, 0.0);
-            plane_0_call = b.Call("textureSampleLevel", "plane0", "smp", "coord", 0.0f);
+            plane_0_call = b.Call("textureSampleLevel", "plane0", "smp", "coord", 0_f);
             // textureSampleLevel(plane1, smp, coord.xy, 0.0);
-            plane_1_call = b.Call("textureSampleLevel", "plane1", "smp", "coord", 0.0f);
+            plane_1_call = b.Call("textureSampleLevel", "plane1", "smp", "coord", 0_f);
         } else if (call_type == sem::BuiltinType::kTextureLoad) {
             // textureLoad(plane0, coords.xy, 0);
             single_plane_call = b.Call("textureLoad", "plane0", "coord", 0_i);
@@ -334,7 +334,7 @@
                      //         params.yuvToRgbConversionMatrix;
                      b.Assign("color",
                               b.Mul(b.vec4<f32>(b.MemberAccessor(plane_0_call, "r"),
-                                                b.MemberAccessor(plane_1_call, "rg"), 1.0f),
+                                                b.MemberAccessor(plane_1_call, "rg"), 1_f),
                                     b.MemberAccessor("params", "yuvToRgbConversionMatrix")))))),
             // color = gammaConversion(color, gammaDecodeParams);
             b.Assign("color", b.Call("gammaCorrection", "color",
@@ -344,8 +344,8 @@
             // color = gammaConversion(color, gammaEncodeParams);
             b.Assign("color", b.Call("gammaCorrection", "color",
                                      b.MemberAccessor("params", "gammaEncodeParams"))),
-            // return vec4<f32>(color, 1.0f);
-            b.Return(b.vec4<f32>("color", 1.0f))};
+            // return vec4<f32>(color, 1.f);
+            b.Return(b.vec4<f32>("color", 1_f))};
     }
 
     /// Creates the textureSampleExternal function if needed and returns a call
diff --git a/src/tint/transform/vertex_pulling.cc b/src/tint/transform/vertex_pulling.cc
index 6d315f5..e297c90 100644
--- a/src/tint/transform/vertex_pulling.cc
+++ b/src/tint/transform/vertex_pulling.cc
@@ -361,19 +361,19 @@
                         case BaseType::kI32:
                             ty = ctx.dst->ty.i32();
                             for (uint32_t i = fmt_dt.width; i < var_dt.width; i++) {
-                                values.emplace_back(ctx.dst->Expr(i32((i == 3) ? 1 : 0)));
+                                values.emplace_back(ctx.dst->Expr((i == 3) ? 1_i : 0_i));
                             }
                             break;
                         case BaseType::kU32:
                             ty = ctx.dst->ty.u32();
                             for (uint32_t i = fmt_dt.width; i < var_dt.width; i++) {
-                                values.emplace_back(ctx.dst->Expr(u32((i == 3) ? 1u : 0u)));
+                                values.emplace_back(ctx.dst->Expr((i == 3) ? 1_u : 0_u));
                             }
                             break;
                         case BaseType::kF32:
                             ty = ctx.dst->ty.f32();
                             for (uint32_t i = fmt_dt.width; i < var_dt.width; i++) {
-                                values.emplace_back(ctx.dst->Expr((i == 3) ? 1.f : 0.f));
+                                values.emplace_back(ctx.dst->Expr((i == 3) ? 1_f : 0_f));
                             }
                             break;
                         default:
diff --git a/src/tint/writer/append_vector.cc b/src/tint/writer/append_vector.cc
index d3d11c1..bc89d1f 100644
--- a/src/tint/writer/append_vector.cc
+++ b/src/tint/writer/append_vector.cc
@@ -51,7 +51,7 @@
     } else if (ty->Is<sem::U32>()) {
         expr = b.Expr(0_u);
     } else if (ty->Is<sem::F32>()) {
-        expr = b.Expr(0.0f);
+        expr = b.Expr(0_f);
     } else if (ty->Is<sem::Bool>()) {
         expr = b.Expr(false);
     } else {
diff --git a/src/tint/writer/append_vector_test.cc b/src/tint/writer/append_vector_test.cc
index 5a9551e..46a135f 100644
--- a/src/tint/writer/append_vector_test.cc
+++ b/src/tint/writer/append_vector_test.cc
@@ -164,7 +164,7 @@
 TEST_F(AppendVectorTest, Vec2i32_f32) {
     auto* scalar_1 = Expr(1_i);
     auto* scalar_2 = Expr(2_i);
-    auto* scalar_3 = Expr(3.0f);
+    auto* scalar_3 = Expr(3_f);
     auto* vec_12 = vec2<i32>(scalar_1, scalar_2);
     WrapInFunction(vec_12, scalar_3);
 
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 29451e7..f52862b 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -72,6 +72,8 @@
 #include "src/tint/writer/float_to_string.h"
 #include "src/tint/writer/generate_external_texture_bindings.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace {
 
 bool IsRelational(tint::ast::BinaryOp op) {
@@ -1296,7 +1298,7 @@
 }
 
 const ast::Expression* GeneratorImpl::CreateF32Zero(const sem::Statement* stmt) {
-    auto* zero = builder_.Expr(0.0f);
+    auto* zero = builder_.Expr(0_f);
     auto* f32 = builder_.create<sem::F32>();
     auto* sem_zero = builder_.create<sem::Expression>(zero, f32, stmt, sem::Constant{},
                                                       /* has_side_effects */ false);
@@ -2177,7 +2179,7 @@
             } else if (std::isnan(l->value)) {
                 out << "uintBitsToFloat(0x7fc00000u)";
             } else {
-                out << FloatToString(l->value) << "f";
+                out << FloatToString(static_cast<float>(l->value)) << "f";
             }
             return true;
         },
diff --git a/src/tint/writer/glsl/generator_impl_binary_test.cc b/src/tint/writer/glsl/generator_impl_binary_test.cc
index 970a2b3..07456d9 100644
--- a/src/tint/writer/glsl/generator_impl_binary_test.cc
+++ b/src/tint/writer/glsl/generator_impl_binary_test.cc
@@ -123,8 +123,8 @@
                     BinaryData{"(left % right)", ast::BinaryOp::kModulo}));
 
 TEST_F(GlslGeneratorImplTest_Binary, Multiply_VectorScalar) {
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
-    auto* rhs = Expr(1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
+    auto* rhs = Expr(1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
 
@@ -140,8 +140,8 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Binary, Multiply_ScalarVector) {
-    auto* lhs = Expr(1.f);
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = Expr(1_f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
 
@@ -159,7 +159,7 @@
 TEST_F(GlslGeneratorImplTest_Binary, Multiply_MatrixScalar) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
     auto* lhs = Expr("mat");
-    auto* rhs = Expr(1.f);
+    auto* rhs = Expr(1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
     WrapInFunction(expr);
@@ -173,7 +173,7 @@
 
 TEST_F(GlslGeneratorImplTest_Binary, Multiply_ScalarMatrix) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
-    auto* lhs = Expr(1.f);
+    auto* lhs = Expr(1_f);
     auto* rhs = Expr("mat");
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
@@ -189,7 +189,7 @@
 TEST_F(GlslGeneratorImplTest_Binary, Multiply_MatrixVector) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
     auto* lhs = Expr("mat");
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
     WrapInFunction(expr);
@@ -203,7 +203,7 @@
 
 TEST_F(GlslGeneratorImplTest_Binary, Multiply_VectorMatrix) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
     auto* rhs = Expr("mat");
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
diff --git a/src/tint/writer/glsl/generator_impl_builtin_test.cc b/src/tint/writer/glsl/generator_impl_builtin_test.cc
index 311abd9..1d80e6a 100644
--- a/src/tint/writer/glsl/generator_impl_builtin_test.cc
+++ b/src/tint/writer/glsl/generator_impl_builtin_test.cc
@@ -258,7 +258,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Builtin, Select_Scalar) {
-    auto* call = Call("select", 1.0f, 2.0f, true);
+    auto* call = Call("select", 1_f, 2_f, true);
     WrapInFunction(CallStmt(call));
     GeneratorImpl& gen = Build();
 
@@ -280,7 +280,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Builtin, Modf_Scalar) {
-    auto* call = Call("modf", 1.0f);
+    auto* call = Call("modf", 1_f);
     WrapInFunction(CallStmt(call));
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -346,7 +346,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Builtin, Frexp_Scalar_i32) {
-    auto* call = Call("frexp", 1.0f);
+    auto* call = Call("frexp", 1_f);
     WrapInFunction(CallStmt(call));
 
     GeneratorImpl& gen = SanitizeAndBuild();
diff --git a/src/tint/writer/glsl/generator_impl_call_test.cc b/src/tint/writer/glsl/generator_impl_call_test.cc
index 9b6a1c3..c8a1de2 100644
--- a/src/tint/writer/glsl/generator_impl_call_test.cc
+++ b/src/tint/writer/glsl/generator_impl_call_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/writer/glsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::glsl {
 namespace {
 
 using GlslGeneratorImplTest_Call = TestHelper;
 
 TEST_F(GlslGeneratorImplTest_Call, EmitExpression_Call_WithoutParams) {
-    Func("my_func", {}, ty.f32(), {Return(1.23f)});
+    Func("my_func", {}, ty.f32(), {Return(1.23_f)});
 
     auto* call = Call("my_func");
     WrapInFunction(call);
@@ -39,7 +41,7 @@
              Param(Sym(), ty.f32()),
              Param(Sym(), ty.f32()),
          },
-         ty.f32(), {Return(1.23f)});
+         ty.f32(), {Return(1.23_f)});
     Global("param1", ty.f32(), ast::StorageClass::kPrivate);
     Global("param2", ty.f32(), ast::StorageClass::kPrivate);
 
diff --git a/src/tint/writer/glsl/generator_impl_constructor_test.cc b/src/tint/writer/glsl/generator_impl_constructor_test.cc
index c247bab..4fa3c0a 100644
--- a/src/tint/writer/glsl/generator_impl_constructor_test.cc
+++ b/src/tint/writer/glsl/generator_impl_constructor_test.cc
@@ -34,7 +34,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Int) {
-    WrapInFunction(Expr(i32(-12345)));
+    WrapInFunction(Expr(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -62,7 +62,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Type_Float) {
-    WrapInFunction(Construct<f32>(-1.2e-5f));
+    WrapInFunction(Construct<f32>(-1.2e-5_f));
 
     GeneratorImpl& gen = Build();
 
@@ -80,7 +80,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Type_Int) {
-    WrapInFunction(Construct<i32>(i32(-12345)));
+    WrapInFunction(Construct<i32>(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -98,7 +98,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Type_Vec) {
-    WrapInFunction(vec3<f32>(1.f, 2.f, 3.f));
+    WrapInFunction(vec3<f32>(1_f, 2_f, 3_f));
 
     GeneratorImpl& gen = Build();
 
@@ -116,7 +116,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Type_Vec_SingleScalar_Float) {
-    WrapInFunction(vec3<f32>(2.0f));
+    WrapInFunction(vec3<f32>(2_f));
 
     GeneratorImpl& gen = Build();
 
@@ -152,7 +152,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Type_Mat) {
-    WrapInFunction(mat2x3<f32>(vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(3.f, 4.f, 5.f)));
+    WrapInFunction(mat2x3<f32>(vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(3_f, 4_f, 5_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -172,8 +172,8 @@
 }
 
 TEST_F(GlslGeneratorImplTest_Constructor, EmitConstructor_Type_Array) {
-    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1.f, 2.f, 3.f),
-                             vec3<f32>(4.f, 5.f, 6.f), vec3<f32>(7.f, 8.f, 9.f)));
+    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1_f, 2_f, 3_f),
+                             vec3<f32>(4_f, 5_f, 6_f), vec3<f32>(7_f, 8_f, 9_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -200,7 +200,7 @@
                                    Member("c", ty.vec3<i32>()),
                                });
 
-    WrapInFunction(Construct(ty.Of(str), 1_i, 2.0f, vec3<i32>(3_i, 4_i, 5_i)));
+    WrapInFunction(Construct(ty.Of(str), 1_i, 2_f, vec3<i32>(3_i, 4_i, 5_i)));
 
     GeneratorImpl& gen = SanitizeAndBuild();
 
diff --git a/src/tint/writer/glsl/generator_impl_function_test.cc b/src/tint/writer/glsl/generator_impl_function_test.cc
index 8b91cef..f352415 100644
--- a/src/tint/writer/glsl/generator_impl_function_test.cc
+++ b/src/tint/writer/glsl/generator_impl_function_test.cc
@@ -193,8 +193,8 @@
                      });
 
     Func("vert_main", {}, ty.Of(interface_struct),
-         {Return(Construct(ty.Of(interface_struct), Construct(ty.vec4<f32>()), Expr(0.5f),
-                           Expr(0.25f)))},
+         {Return(Construct(ty.Of(interface_struct), Construct(ty.vec4<f32>()), Expr(0.5_f),
+                           Expr(0.25_f)))},
          {Stage(ast::PipelineStage::kVertex)});
 
     Func("frag_main", {Param("inputs", ty.Of(interface_struct))}, ty.void_(),
@@ -271,17 +271,17 @@
 
   Func("foo", {Param("x", ty.f32())}, ty.Of(vertex_output_struct),
        {Return(Construct(ty.Of(vertex_output_struct),
-                         Construct(ty.vec4<f32>(), "x", "x", "x", Expr(1.f))))},
+                         Construct(ty.vec4<f32>(), "x", "x", "x", Expr(1_f))))},
        {});
 
   Func("vert_main1", {}, ty.Of(vertex_output_struct),
        {Return(Construct(ty.Of(vertex_output_struct),
-                         Expr(Call("foo", Expr(0.5f)))))},
+                         Expr(Call("foo", Expr(0.5_f)))))},
        {Stage(ast::PipelineStage::kVertex)});
 
   Func("vert_main2", {}, ty.Of(vertex_output_struct),
        {Return(Construct(ty.Of(vertex_output_struct),
-                         Expr(Call("foo", Expr(0.25f)))))},
+                         Expr(Call("foo", Expr(0.25_f)))))},
        {Stage(ast::PipelineStage::kVertex)});
 
   GeneratorImpl& gen = SanitizeAndBuild();
@@ -336,7 +336,7 @@
              Return(MemberAccessor(MemberAccessor(ubo, "coord"), "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", {}, ty.void_(),
          {
@@ -529,7 +529,7 @@
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
-             Assign(MemberAccessor("coord", "b"), Expr(2.0f)),
+             Assign(MemberAccessor("coord", "b"), Expr(2_f)),
              Return(),
          },
          {
@@ -577,7 +577,7 @@
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
-             Assign(MemberAccessor("coord", "b"), Expr(2.0f)),
+             Assign(MemberAccessor("coord", "b"), Expr(2_f)),
              Return(),
          },
          {
@@ -624,7 +624,7 @@
              Return(MemberAccessor("coord", "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
@@ -673,7 +673,7 @@
              Return(MemberAccessor("coord", "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
diff --git a/src/tint/writer/glsl/generator_impl_import_test.cc b/src/tint/writer/glsl/generator_impl_import_test.cc
index a4a6440..2843f98 100644
--- a/src/tint/writer/glsl/generator_impl_import_test.cc
+++ b/src/tint/writer/glsl/generator_impl_import_test.cc
@@ -35,7 +35,7 @@
     auto param = GetParam();
 
     auto* ident = Expr(param.name);
-    auto* expr = Call(ident, 1.f);
+    auto* expr = Call(ident, 1_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -92,7 +92,7 @@
     auto param = GetParam();
 
     auto* ident = Expr(param.name);
-    auto* expr = Call(ident, vec3<f32>(1.f, 2.f, 3.f));
+    auto* expr = Call(ident, vec3<f32>(1_f, 2_f, 3_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -132,7 +132,7 @@
 TEST_P(GlslImportData_DualParam_ScalarTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, 1.f, 2.f);
+    auto* expr = Call(param.name, 1_f, 2_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -154,7 +154,7 @@
 TEST_P(GlslImportData_DualParam_VectorTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(4.f, 5.f, 6.f));
+    auto* expr = Call(param.name, vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -197,7 +197,7 @@
 TEST_P(GlslImportData_TripleParam_ScalarTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, 1.f, 2.f, 3.f);
+    auto* expr = Call(param.name, 1_f, 2_f, 3_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -216,8 +216,8 @@
 TEST_P(GlslImportData_TripleParam_VectorTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(4.f, 5.f, 6.f),
-                      vec3<f32>(7.f, 8.f, 9.f));
+    auto* expr = Call(param.name, vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f),
+                      vec3<f32>(7_f, 8_f, 9_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
diff --git a/src/tint/writer/glsl/generator_impl_loop_test.cc b/src/tint/writer/glsl/generator_impl_loop_test.cc
index de29622..5187daf 100644
--- a/src/tint/writer/glsl/generator_impl_loop_test.cc
+++ b/src/tint/writer/glsl/generator_impl_loop_test.cc
@@ -114,8 +114,8 @@
 
     Global("rhs", ty.f32(), ast::StorageClass::kPrivate);
 
-    auto* body = Block(Decl(Var("lhs", ty.f32(), Expr(2.4f))),  //
-                       Decl(Var("other", ty.f32())),            //
+    auto* body = Block(Decl(Var("lhs", ty.f32(), Expr(2.4_f))),  //
+                       Decl(Var("other", ty.f32())),             //
                        Break());
     auto* continuing = Block(Assign("lhs", "rhs"));
     auto* outer = Loop(body, continuing);
diff --git a/src/tint/writer/glsl/generator_impl_member_accessor_test.cc b/src/tint/writer/glsl/generator_impl_member_accessor_test.cc
index 2fdc833..935df75 100644
--- a/src/tint/writer/glsl/generator_impl_member_accessor_test.cc
+++ b/src/tint/writer/glsl/generator_impl_member_accessor_test.cc
@@ -739,7 +739,7 @@
 
     SetupFunction({
         Assign(MemberAccessor(IndexAccessor(MemberAccessor("data", "c"), 2_i), "b"),
-               vec3<f32>(1.f, 2.f, 3.f)),
+               vec3<f32>(1_f, 2_f, 3_f)),
     });
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -797,7 +797,7 @@
     SetupFunction({
         Assign(MemberAccessor(MemberAccessor(IndexAccessor(MemberAccessor("data", "c"), 2_i), "b"),
                               "y"),
-               Expr(1.f)),
+               Expr(1_f)),
     });
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -833,7 +833,7 @@
 
 TEST_F(GlslGeneratorImplTest_MemberAccessor, Swizzle_xyz) {
     auto* var =
-        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1.f, 2.f, 3.f, 4.f));
+        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1_f, 2_f, 3_f, 4_f));
     auto* expr = MemberAccessor("my_vec", "xyz");
     WrapInFunction(var, expr);
 
@@ -844,7 +844,7 @@
 
 TEST_F(GlslGeneratorImplTest_MemberAccessor, Swizzle_gbr) {
     auto* var =
-        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1.f, 2.f, 3.f, 4.f));
+        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1_f, 2_f, 3_f, 4_f));
     auto* expr = MemberAccessor("my_vec", "gbr");
     WrapInFunction(var, expr);
 
diff --git a/src/tint/writer/glsl/generator_impl_module_constant_test.cc b/src/tint/writer/glsl/generator_impl_module_constant_test.cc
index 35e1dd2..223122a 100644
--- a/src/tint/writer/glsl/generator_impl_module_constant_test.cc
+++ b/src/tint/writer/glsl/generator_impl_module_constant_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/id_attribute.h"
 #include "src/tint/writer/glsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::glsl {
 namespace {
 
 using GlslGeneratorImplTest_ModuleConstant = TestHelper;
 
 TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_ModuleConstant) {
-    auto* var = Let("pos", ty.array<f32, 3>(), array<f32, 3>(1.f, 2.f, 3.f));
+    auto* var = Let("pos", ty.array<f32, 3>(), array<f32, 3>(1_f, 2_f, 3_f));
     WrapInFunction(Decl(var));
 
     GeneratorImpl& gen = Build();
@@ -31,7 +33,7 @@
 }
 
 TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant) {
-    auto* var = Override("pos", ty.f32(), Expr(3.0f),
+    auto* var = Override("pos", ty.f32(), Expr(3_f),
                          ast::AttributeList{
                              Id(23),
                          });
@@ -63,11 +65,11 @@
 }
 
 TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant_NoId) {
-    auto* a = Override("a", ty.f32(), Expr(3.0f),
+    auto* a = Override("a", ty.f32(), Expr(3_f),
                        ast::AttributeList{
                            Id(0),
                        });
-    auto* b = Override("b", ty.f32(), Expr(2.0f));
+    auto* b = Override("b", ty.f32(), Expr(2_f));
 
     GeneratorImpl& gen = Build();
 
diff --git a/src/tint/writer/glsl/generator_impl_sanitizer_test.cc b/src/tint/writer/glsl/generator_impl_sanitizer_test.cc
index 874bfd0..6575c56 100644
--- a/src/tint/writer/glsl/generator_impl_sanitizer_test.cc
+++ b/src/tint/writer/glsl/generator_impl_sanitizer_test.cc
@@ -194,7 +194,7 @@
                                    Member("b", ty.vec3<f32>()),
                                    Member("c", ty.i32()),
                                });
-    auto* struct_init = Construct(ty.Of(str), 1_i, vec3<f32>(2.f, 3.f, 4.f), 4_i);
+    auto* struct_init = Construct(ty.Of(str), 1_i, vec3<f32>(2_f, 3_f, 4_f), 4_i);
     auto* struct_access = MemberAccessor(struct_init, "b");
     auto* pos = Var("pos", ty.vec3<f32>(), ast::StorageClass::kNone, struct_access);
 
diff --git a/src/tint/writer/glsl/generator_impl_workgroup_var_test.cc b/src/tint/writer/glsl/generator_impl_workgroup_var_test.cc
index a61cb17..faa675d 100644
--- a/src/tint/writer/glsl/generator_impl_workgroup_var_test.cc
+++ b/src/tint/writer/glsl/generator_impl_workgroup_var_test.cc
@@ -29,7 +29,7 @@
 TEST_F(GlslGeneratorImplTest_WorkgroupVar, Basic) {
     Global("wg", ty.f32(), ast::StorageClass::kWorkgroup);
 
-    Func("main", {}, ty.void_(), {Assign("wg", 1.2f)},
+    Func("main", {}, ty.void_(), {Assign("wg", 1.2_f)},
          {
              Stage(ast::PipelineStage::kCompute),
              WorkgroupSize(1_i),
@@ -45,7 +45,7 @@
 
     Global("wg", ty.Of(alias), ast::StorageClass::kWorkgroup);
 
-    Func("main", {}, ty.void_(), {Assign("wg", 1.2f)},
+    Func("main", {}, ty.void_(), {Assign("wg", 1.2_f)},
          {
              Stage(ast::PipelineStage::kCompute),
              WorkgroupSize(1_i),
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index a64630b..7ee5337 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -3040,7 +3040,7 @@
             } else if (std::isnan(fl->value)) {
                 out << "asfloat(0x7fc00000u)";
             } else {
-                out << FloatToString(fl->value) << "f";
+                out << FloatToString(static_cast<float>(fl->value)) << "f";
             }
             return true;
         },
diff --git a/src/tint/writer/hlsl/generator_impl_binary_test.cc b/src/tint/writer/hlsl/generator_impl_binary_test.cc
index 4d62885..446a5a8 100644
--- a/src/tint/writer/hlsl/generator_impl_binary_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_binary_test.cc
@@ -141,8 +141,8 @@
                                BinaryData::Types::Float}));
 
 TEST_F(HlslGeneratorImplTest_Binary, Multiply_VectorScalar) {
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
-    auto* rhs = Expr(1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
+    auto* rhs = Expr(1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
 
@@ -158,8 +158,8 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Binary, Multiply_ScalarVector) {
-    auto* lhs = Expr(1.f);
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = Expr(1_f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
 
@@ -177,7 +177,7 @@
 TEST_F(HlslGeneratorImplTest_Binary, Multiply_MatrixScalar) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
     auto* lhs = Expr("mat");
-    auto* rhs = Expr(1.f);
+    auto* rhs = Expr(1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
     WrapInFunction(expr);
@@ -191,7 +191,7 @@
 
 TEST_F(HlslGeneratorImplTest_Binary, Multiply_ScalarMatrix) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
-    auto* lhs = Expr(1.f);
+    auto* lhs = Expr(1_f);
     auto* rhs = Expr("mat");
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
@@ -207,7 +207,7 @@
 TEST_F(HlslGeneratorImplTest_Binary, Multiply_MatrixVector) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
     auto* lhs = Expr("mat");
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
     WrapInFunction(expr);
@@ -221,7 +221,7 @@
 
 TEST_F(HlslGeneratorImplTest_Binary, Multiply_VectorMatrix) {
     Global("mat", ty.mat3x3<f32>(), ast::StorageClass::kPrivate);
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
     auto* rhs = Expr("mat");
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
diff --git a/src/tint/writer/hlsl/generator_impl_builtin_test.cc b/src/tint/writer/hlsl/generator_impl_builtin_test.cc
index ada17f1..e4e6ba9 100644
--- a/src/tint/writer/hlsl/generator_impl_builtin_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_builtin_test.cc
@@ -257,7 +257,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Builtin, Select_Scalar) {
-    auto* call = Call("select", 1.0f, 2.0f, true);
+    auto* call = Call("select", 1_f, 2_f, true);
     WrapInFunction(CallStmt(call));
     GeneratorImpl& gen = Build();
 
@@ -279,7 +279,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Builtin, Modf_Scalar) {
-    auto* call = Call("modf", 1.0f);
+    auto* call = Call("modf", 1_f);
     WrapInFunction(CallStmt(call));
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -331,7 +331,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Builtin, Frexp_Scalar_i32) {
-    auto* call = Call("frexp", 1.0f);
+    auto* call = Call("frexp", 1_f);
     WrapInFunction(CallStmt(call));
 
     GeneratorImpl& gen = SanitizeAndBuild();
diff --git a/src/tint/writer/hlsl/generator_impl_call_test.cc b/src/tint/writer/hlsl/generator_impl_call_test.cc
index e905e88..b72b0eb 100644
--- a/src/tint/writer/hlsl/generator_impl_call_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_call_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/writer/hlsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::hlsl {
 namespace {
 
 using HlslGeneratorImplTest_Call = TestHelper;
 
 TEST_F(HlslGeneratorImplTest_Call, EmitExpression_Call_WithoutParams) {
-    Func("my_func", {}, ty.f32(), {Return(1.23f)});
+    Func("my_func", {}, ty.f32(), {Return(1.23_f)});
 
     auto* call = Call("my_func");
     WrapInFunction(call);
@@ -39,7 +41,7 @@
              Param(Sym(), ty.f32()),
              Param(Sym(), ty.f32()),
          },
-         ty.f32(), {Return(1.23f)});
+         ty.f32(), {Return(1.23_f)});
     Global("param1", ty.f32(), ast::StorageClass::kPrivate);
     Global("param2", ty.f32(), ast::StorageClass::kPrivate);
 
diff --git a/src/tint/writer/hlsl/generator_impl_constructor_test.cc b/src/tint/writer/hlsl/generator_impl_constructor_test.cc
index 5916b0a..b44dc69 100644
--- a/src/tint/writer/hlsl/generator_impl_constructor_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_constructor_test.cc
@@ -34,7 +34,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Int) {
-    WrapInFunction(Expr(i32(-12345)));
+    WrapInFunction(Expr(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -62,7 +62,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Float) {
-    WrapInFunction(Construct<f32>(-1.2e-5f));
+    WrapInFunction(Construct<f32>(-1.2e-5_f));
 
     GeneratorImpl& gen = Build();
 
@@ -80,7 +80,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Int) {
-    WrapInFunction(Construct<i32>(i32(-12345)));
+    WrapInFunction(Construct<i32>(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -98,7 +98,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Vec) {
-    WrapInFunction(vec3<f32>(1.f, 2.f, 3.f));
+    WrapInFunction(vec3<f32>(1_f, 2_f, 3_f));
 
     GeneratorImpl& gen = Build();
 
@@ -116,7 +116,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Vec_SingleScalar_Float_Literal) {
-    WrapInFunction(vec3<f32>(2.0f));
+    WrapInFunction(vec3<f32>(2_f));
 
     GeneratorImpl& gen = Build();
 
@@ -125,7 +125,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Vec_SingleScalar_Float_Var) {
-    auto* var = Var("v", nullptr, Expr(2.0f));
+    auto* var = Var("v", nullptr, Expr(2_f));
     auto* cast = vec3<f32>(var);
     WrapInFunction(var, cast);
 
@@ -176,7 +176,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Mat) {
-    WrapInFunction(mat2x3<f32>(vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(3.f, 4.f, 5.f)));
+    WrapInFunction(mat2x3<f32>(vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(3_f, 4_f, 5_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -197,8 +197,8 @@
 }
 
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Array) {
-    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1.f, 2.f, 3.f),
-                             vec3<f32>(4.f, 5.f, 6.f), vec3<f32>(7.f, 8.f, 9.f)));
+    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1_f, 2_f, 3_f),
+                             vec3<f32>(4_f, 5_f, 6_f), vec3<f32>(7_f, 8_f, 9_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -223,7 +223,7 @@
                                    Member("c", ty.vec3<i32>()),
                                });
 
-    WrapInFunction(Construct(ty.Of(str), 1_i, 2.0f, vec3<i32>(3_i, 4_i, 5_i)));
+    WrapInFunction(Construct(ty.Of(str), 1_i, 2_f, vec3<i32>(3_i, 4_i, 5_i)));
 
     GeneratorImpl& gen = SanitizeAndBuild();
 
diff --git a/src/tint/writer/hlsl/generator_impl_function_test.cc b/src/tint/writer/hlsl/generator_impl_function_test.cc
index 0525fa6..6a1c566 100644
--- a/src/tint/writer/hlsl/generator_impl_function_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_function_test.cc
@@ -192,8 +192,8 @@
                      });
 
     Func("vert_main", {}, ty.Of(interface_struct),
-         {Return(Construct(ty.Of(interface_struct), Construct(ty.vec4<f32>()), Expr(0.5f),
-                           Expr(0.25f)))},
+         {Return(Construct(ty.Of(interface_struct), Construct(ty.vec4<f32>()), Expr(0.5_f),
+                           Expr(0.25_f)))},
          {Stage(ast::PipelineStage::kVertex)});
 
     Func("frag_main", {Param("inputs", ty.Of(interface_struct))}, ty.void_(),
@@ -270,13 +270,13 @@
 
     Func("foo", {Param("x", ty.f32())}, ty.Of(vertex_output_struct),
          {Return(Construct(ty.Of(vertex_output_struct),
-                           Construct(ty.vec4<f32>(), "x", "x", "x", Expr(1.f))))},
+                           Construct(ty.vec4<f32>(), "x", "x", "x", Expr(1_f))))},
          {});
 
-    Func("vert_main1", {}, ty.Of(vertex_output_struct), {Return(Call("foo", Expr(0.5f)))},
+    Func("vert_main1", {}, ty.Of(vertex_output_struct), {Return(Call("foo", Expr(0.5_f)))},
          {Stage(ast::PipelineStage::kVertex)});
 
-    Func("vert_main2", {}, ty.Of(vertex_output_struct), {Return(Call("foo", Expr(0.25f)))},
+    Func("vert_main2", {}, ty.Of(vertex_output_struct), {Return(Call("foo", Expr(0.25_f)))},
          {Stage(ast::PipelineStage::kVertex)});
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -340,7 +340,7 @@
              Return(MemberAccessor(MemberAccessor(ubo, "coord"), "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", {}, ty.void_(),
          {
@@ -490,7 +490,7 @@
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
-             Assign(MemberAccessor("coord", "b"), Expr(2.0f)),
+             Assign(MemberAccessor("coord", "b"), Expr(2_f)),
              Return(),
          },
          {
@@ -524,7 +524,7 @@
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
-             Assign(MemberAccessor("coord", "b"), Expr(2.0f)),
+             Assign(MemberAccessor("coord", "b"), Expr(2_f)),
              Return(),
          },
          {
@@ -557,7 +557,7 @@
              Return(MemberAccessor("coord", "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
@@ -599,7 +599,7 @@
              Return(MemberAccessor("coord", "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          {
diff --git a/src/tint/writer/hlsl/generator_impl_import_test.cc b/src/tint/writer/hlsl/generator_impl_import_test.cc
index 73e3161..f7d544e 100644
--- a/src/tint/writer/hlsl/generator_impl_import_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_import_test.cc
@@ -35,7 +35,7 @@
     auto param = GetParam();
 
     auto* ident = Expr(param.name);
-    auto* expr = Call(ident, 1.f);
+    auto* expr = Call(ident, 1_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -92,7 +92,7 @@
     auto param = GetParam();
 
     auto* ident = Expr(param.name);
-    auto* expr = Call(ident, vec3<f32>(1.f, 2.f, 3.f));
+    auto* expr = Call(ident, vec3<f32>(1_f, 2_f, 3_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -132,7 +132,7 @@
 TEST_P(HlslImportData_DualParam_ScalarTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, 1.f, 2.f);
+    auto* expr = Call(param.name, 1_f, 2_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -154,7 +154,7 @@
 TEST_P(HlslImportData_DualParam_VectorTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(4.f, 5.f, 6.f));
+    auto* expr = Call(param.name, vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -197,7 +197,7 @@
 TEST_P(HlslImportData_TripleParam_ScalarTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, 1.f, 2.f, 3.f);
+    auto* expr = Call(param.name, 1_f, 2_f, 3_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -217,8 +217,8 @@
 TEST_P(HlslImportData_TripleParam_VectorTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(4.f, 5.f, 6.f),
-                      vec3<f32>(7.f, 8.f, 9.f));
+    auto* expr = Call(param.name, vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f),
+                      vec3<f32>(7_f, 8_f, 9_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
diff --git a/src/tint/writer/hlsl/generator_impl_loop_test.cc b/src/tint/writer/hlsl/generator_impl_loop_test.cc
index 0bd1f75..0bf4090 100644
--- a/src/tint/writer/hlsl/generator_impl_loop_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_loop_test.cc
@@ -114,8 +114,8 @@
 
     Global("rhs", ty.f32(), ast::StorageClass::kPrivate);
 
-    auto* body = Block(Decl(Var("lhs", ty.f32(), Expr(2.4f))),  //
-                       Decl(Var("other", ty.f32())),            //
+    auto* body = Block(Decl(Var("lhs", ty.f32(), Expr(2.4_f))),  //
+                       Decl(Var("other", ty.f32())),             //
                        Break());
 
     auto* continuing = Block(Assign("lhs", "rhs"));
diff --git a/src/tint/writer/hlsl/generator_impl_member_accessor_test.cc b/src/tint/writer/hlsl/generator_impl_member_accessor_test.cc
index ad1e973..7f2933a 100644
--- a/src/tint/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -644,7 +644,7 @@
     // };
     //
     // var<storage> data : Pre;
-    // data.c[2].b = vec3<f32>(1.f, 2.f, 3.f);
+    // data.c[2].b = vec3<f32>(1_f, 2_f, 3_f);
 
     auto* inner = Structure("Inner", {
                                          Member("a", ty.vec3<f32>()),
@@ -657,7 +657,7 @@
 
     SetupFunction({
         Assign(MemberAccessor(IndexAccessor(MemberAccessor("data", "c"), 2_i), "b"),
-               vec3<f32>(1.f, 2.f, 3.f)),
+               vec3<f32>(1_f, 2_f, 3_f)),
     });
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -698,7 +698,7 @@
     SetupFunction({
         Assign(MemberAccessor(MemberAccessor(IndexAccessor(MemberAccessor("data", "c"), 2_i), "b"),
                               "y"),
-               Expr(1.f)),
+               Expr(1_f)),
     });
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -717,7 +717,7 @@
 
 TEST_F(HlslGeneratorImplTest_MemberAccessor, Swizzle_xyz) {
     auto* var =
-        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1.f, 2.f, 3.f, 4.f));
+        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1_f, 2_f, 3_f, 4_f));
     auto* expr = MemberAccessor("my_vec", "xyz");
     WrapInFunction(var, expr);
 
@@ -728,7 +728,7 @@
 
 TEST_F(HlslGeneratorImplTest_MemberAccessor, Swizzle_gbr) {
     auto* var =
-        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1.f, 2.f, 3.f, 4.f));
+        Var("my_vec", ty.vec4<f32>(), ast::StorageClass::kNone, vec4<f32>(1_f, 2_f, 3_f, 4_f));
     auto* expr = MemberAccessor("my_vec", "gbr");
     WrapInFunction(var, expr);
 
diff --git a/src/tint/writer/hlsl/generator_impl_module_constant_test.cc b/src/tint/writer/hlsl/generator_impl_module_constant_test.cc
index 14e8e93..2c96744 100644
--- a/src/tint/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_module_constant_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/id_attribute.h"
 #include "src/tint/writer/hlsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::hlsl {
 namespace {
 
 using HlslGeneratorImplTest_ModuleConstant = TestHelper;
 
 TEST_F(HlslGeneratorImplTest_ModuleConstant, Emit_ModuleConstant) {
-    auto* var = Let("pos", ty.array<f32, 3>(), array<f32, 3>(1.f, 2.f, 3.f));
+    auto* var = Let("pos", ty.array<f32, 3>(), array<f32, 3>(1_f, 2_f, 3_f));
     WrapInFunction(Decl(var));
 
     GeneratorImpl& gen = Build();
@@ -31,7 +33,7 @@
 }
 
 TEST_F(HlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant) {
-    auto* var = Override("pos", ty.f32(), Expr(3.0f),
+    auto* var = Override("pos", ty.f32(), Expr(3_f),
                          ast::AttributeList{
                              Id(23),
                          });
@@ -63,11 +65,11 @@
 }
 
 TEST_F(HlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant_NoId) {
-    auto* a = Override("a", ty.f32(), Expr(3.0f),
+    auto* a = Override("a", ty.f32(), Expr(3_f),
                        ast::AttributeList{
                            Id(0),
                        });
-    auto* b = Override("b", ty.f32(), Expr(2.0f));
+    auto* b = Override("b", ty.f32(), Expr(2_f));
 
     GeneratorImpl& gen = Build();
 
diff --git a/src/tint/writer/hlsl/generator_impl_sanitizer_test.cc b/src/tint/writer/hlsl/generator_impl_sanitizer_test.cc
index b68c950..66df535 100644
--- a/src/tint/writer/hlsl/generator_impl_sanitizer_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_sanitizer_test.cc
@@ -219,7 +219,7 @@
                                    Member("b", ty.vec3<f32>()),
                                    Member("c", ty.i32()),
                                });
-    auto* struct_init = Construct(ty.Of(str), 1_i, vec3<f32>(2.f, 3.f, 4.f), 4_i);
+    auto* struct_init = Construct(ty.Of(str), 1_i, vec3<f32>(2_f, 3_f, 4_f), 4_i);
     auto* struct_access = MemberAccessor(struct_init, "b");
     auto* pos = Var("pos", ty.vec3<f32>(), ast::StorageClass::kNone, struct_access);
 
diff --git a/src/tint/writer/hlsl/generator_impl_workgroup_var_test.cc b/src/tint/writer/hlsl/generator_impl_workgroup_var_test.cc
index 466c871..826a545 100644
--- a/src/tint/writer/hlsl/generator_impl_workgroup_var_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_workgroup_var_test.cc
@@ -29,7 +29,7 @@
 TEST_F(HlslGeneratorImplTest_WorkgroupVar, Basic) {
     Global("wg", ty.f32(), ast::StorageClass::kWorkgroup);
 
-    Func("main", {}, ty.void_(), {Assign("wg", 1.2f)},
+    Func("main", {}, ty.void_(), {Assign("wg", 1.2_f)},
          {
              Stage(ast::PipelineStage::kCompute),
              WorkgroupSize(1_i),
@@ -45,7 +45,7 @@
 
     Global("wg", ty.Of(alias), ast::StorageClass::kWorkgroup);
 
-    Func("main", {}, ty.void_(), {Assign("wg", 1.2f)},
+    Func("main", {}, ty.void_(), {Assign("wg", 1.2_f)},
          {
              Stage(ast::PipelineStage::kCompute),
              WorkgroupSize(1_i),
diff --git a/src/tint/writer/msl/generator_impl.cc b/src/tint/writer/msl/generator_impl.cc
index 8665cdb..8f5800c 100644
--- a/src/tint/writer/msl/generator_impl.cc
+++ b/src/tint/writer/msl/generator_impl.cc
@@ -1517,7 +1517,7 @@
             } else if (std::isnan(l->value)) {
                 out << "NAN";
             } else {
-                out << FloatToString(l->value) << "f";
+                out << FloatToString(static_cast<float>(l->value)) << "f";
             }
             return true;
         },
diff --git a/src/tint/writer/msl/generator_impl_call_test.cc b/src/tint/writer/msl/generator_impl_call_test.cc
index 9fc7b8f..93c9b83 100644
--- a/src/tint/writer/msl/generator_impl_call_test.cc
+++ b/src/tint/writer/msl/generator_impl_call_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/writer/msl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::msl {
 namespace {
 
 using MslGeneratorImplTest = TestHelper;
 
 TEST_F(MslGeneratorImplTest, EmitExpression_Call_WithoutParams) {
-    Func("my_func", {}, ty.f32(), {Return(1.23f)});
+    Func("my_func", {}, ty.f32(), {Return(1.23_f)});
 
     auto* call = Call("my_func");
     WrapInFunction(call);
@@ -39,7 +41,7 @@
              Param(Sym(), ty.f32()),
              Param(Sym(), ty.f32()),
          },
-         ty.f32(), {Return(1.23f)});
+         ty.f32(), {Return(1.23_f)});
     Global("param1", ty.f32(), ast::StorageClass::kPrivate);
     Global("param2", ty.f32(), ast::StorageClass::kPrivate);
 
diff --git a/src/tint/writer/msl/generator_impl_constructor_test.cc b/src/tint/writer/msl/generator_impl_constructor_test.cc
index 134a7ae..fa2e113 100644
--- a/src/tint/writer/msl/generator_impl_constructor_test.cc
+++ b/src/tint/writer/msl/generator_impl_constructor_test.cc
@@ -34,7 +34,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Int) {
-    WrapInFunction(Expr(i32(-12345)));
+    WrapInFunction(Expr(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -53,7 +53,7 @@
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Float) {
     // Use a number close to 1<<30 but whose decimal representation ends in 0.
-    WrapInFunction(Expr(static_cast<float>((1 << 30) - 4)));
+    WrapInFunction(Expr(f32((1 << 30) - 4)));
 
     GeneratorImpl& gen = Build();
 
@@ -62,7 +62,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Float) {
-    WrapInFunction(Construct<f32>(-1.2e-5f));
+    WrapInFunction(Construct<f32>(-1.2e-5_f));
 
     GeneratorImpl& gen = Build();
 
@@ -80,7 +80,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Int) {
-    WrapInFunction(Construct<i32>(i32(-12345)));
+    WrapInFunction(Construct<i32>(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -98,7 +98,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Vec) {
-    WrapInFunction(vec3<f32>(1.f, 2.f, 3.f));
+    WrapInFunction(vec3<f32>(1_f, 2_f, 3_f));
 
     GeneratorImpl& gen = Build();
 
@@ -116,8 +116,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Mat) {
-    WrapInFunction(
-        Construct(ty.mat2x3<f32>(), vec3<f32>(1.0f, 2.0f, 3.0f), vec3<f32>(3.0f, 4.0f, 5.0f)));
+    WrapInFunction(Construct(ty.mat2x3<f32>(), vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(3_f, 4_f, 5_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -139,8 +138,8 @@
 }
 
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Array) {
-    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1.0f, 2.0f, 3.0f),
-                             vec3<f32>(4.0f, 5.0f, 6.0f), vec3<f32>(7.0f, 8.0f, 9.0f)));
+    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1_f, 2_f, 3_f),
+                             vec3<f32>(4_f, 5_f, 6_f), vec3<f32>(7_f, 8_f, 9_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -156,7 +155,7 @@
                                    Member("c", ty.vec3<i32>()),
                                });
 
-    WrapInFunction(Construct(ty.Of(str), 1_i, 2.0f, vec3<i32>(3_i, 4_i, 5_i)));
+    WrapInFunction(Construct(ty.Of(str), 1_i, 2_f, vec3<i32>(3_i, 4_i, 5_i)));
 
     GeneratorImpl& gen = Build();
 
diff --git a/src/tint/writer/msl/generator_impl_function_test.cc b/src/tint/writer/msl/generator_impl_function_test.cc
index 063fda8..5eb4905 100644
--- a/src/tint/writer/msl/generator_impl_function_test.cc
+++ b/src/tint/writer/msl/generator_impl_function_test.cc
@@ -177,7 +177,7 @@
                      });
 
     Func("vert_main", {}, ty.Of(interface_struct),
-         {Return(Construct(ty.Of(interface_struct), Expr(0.5f), Expr(0.25f),
+         {Return(Construct(ty.Of(interface_struct), Expr(0.5_f), Expr(0.25_f),
                            Construct(ty.vec4<f32>())))},
          {Stage(ast::PipelineStage::kVertex)});
 
@@ -257,13 +257,13 @@
 
     Func("foo", {Param("x", ty.f32())}, ty.Of(vertex_output_struct),
          {Return(Construct(ty.Of(vertex_output_struct),
-                           Construct(ty.vec4<f32>(), "x", "x", "x", Expr(1.f))))},
+                           Construct(ty.vec4<f32>(), "x", "x", "x", Expr(1_f))))},
          {});
 
-    Func("vert_main1", {}, ty.Of(vertex_output_struct), {Return(Expr(Call("foo", Expr(0.5f))))},
+    Func("vert_main1", {}, ty.Of(vertex_output_struct), {Return(Expr(Call("foo", Expr(0.5_f))))},
          {Stage(ast::PipelineStage::kVertex)});
 
-    Func("vert_main2", {}, ty.Of(vertex_output_struct), {Return(Expr(Call("foo", Expr(0.25f))))},
+    Func("vert_main2", {}, ty.Of(vertex_output_struct), {Return(Expr(Call("foo", Expr(0.25_f))))},
          {Stage(ast::PipelineStage::kVertex)});
 
     GeneratorImpl& gen = SanitizeAndBuild();
@@ -415,7 +415,7 @@
              Return(MemberAccessor(MemberAccessor(ubo, "coord"), "x")),
          });
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", {}, ty.void_(),
          {
@@ -467,7 +467,7 @@
 
     Func("sub_func", params, ty.f32(), body, {});
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          ast::StatementList{
@@ -520,7 +520,7 @@
 
     Func("sub_func", params, ty.f32(), body, {});
 
-    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1.0f));
+    auto* var = Var("v", ty.f32(), ast::StorageClass::kNone, Call("sub_func", 1_f));
 
     Func("frag_main", ast::VariableList{}, ty.void_(),
          ast::StatementList{
diff --git a/src/tint/writer/msl/generator_impl_import_test.cc b/src/tint/writer/msl/generator_impl_import_test.cc
index fa5519a..8a6d2d0 100644
--- a/src/tint/writer/msl/generator_impl_import_test.cc
+++ b/src/tint/writer/msl/generator_impl_import_test.cc
@@ -33,7 +33,7 @@
 using MslImportData_SingleParamTest = TestParamHelper<MslImportData>;
 TEST_P(MslImportData_SingleParamTest, FloatScalar) {
     auto param = GetParam();
-    auto* call = Call(param.name, 1.f);
+    auto* call = Call(param.name, 1_f);
 
     // The resolver will set the builtin data for the ident
     WrapInFunction(call);
@@ -87,7 +87,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, MslImportData_SingleParamTest_ScalarLength) {
-    auto* expr = Call("length", 2.f);
+    auto* expr = Call("length", 2_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -100,7 +100,7 @@
 using MslImportData_DualParam_ScalarTest = TestParamHelper<MslImportData>;
 TEST_P(MslImportData_DualParam_ScalarTest, Float) {
     auto param = GetParam();
-    auto* expr = Call(param.name, 1.0f, 2.0f);
+    auto* expr = Call(param.name, 1_f, 2_f);
 
     WrapInFunction(expr);
 
@@ -119,7 +119,7 @@
                                          MslImportData{"step", "step"}));
 
 TEST_F(MslGeneratorImplTest, MslImportData_DualParam_ScalarDistance) {
-    auto* expr = Call("distance", 2.f, 3.f);
+    auto* expr = Call("distance", 2_f, 3_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -133,7 +133,7 @@
 TEST_P(MslImportData_DualParam_VectorTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(4.f, 5.f, 6.f));
+    auto* expr = Call(param.name, vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -175,7 +175,7 @@
 TEST_P(MslImportData_TripleParam_ScalarTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, 1.f, 2.f, 3.f);
+    auto* expr = Call(param.name, 1_f, 2_f, 3_f);
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
@@ -195,8 +195,8 @@
 TEST_P(MslImportData_TripleParam_VectorTest, Float) {
     auto param = GetParam();
 
-    auto* expr = Call(param.name, vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(4.f, 5.f, 6.f),
-                      vec3<f32>(7.f, 8.f, 9.f));
+    auto* expr = Call(param.name, vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f),
+                      vec3<f32>(7_f, 8_f, 9_f));
     WrapInFunction(expr);
 
     GeneratorImpl& gen = Build();
diff --git a/src/tint/writer/msl/generator_impl_loop_test.cc b/src/tint/writer/msl/generator_impl_loop_test.cc
index 1df7486..248e711 100644
--- a/src/tint/writer/msl/generator_impl_loop_test.cc
+++ b/src/tint/writer/msl/generator_impl_loop_test.cc
@@ -109,8 +109,8 @@
 
     Global("rhs", ty.f32(), ast::StorageClass::kPrivate);
 
-    auto* body = Block(Decl(Var("lhs", ty.f32(), Expr(2.4f))),  //
-                       Decl(Var("other", ty.f32())),            //
+    auto* body = Block(Decl(Var("lhs", ty.f32(), Expr(2.4_f))),  //
+                       Decl(Var("other", ty.f32())),             //
                        Break());
 
     auto* continuing = Block(Assign("lhs", "rhs"));
diff --git a/src/tint/writer/msl/generator_impl_module_constant_test.cc b/src/tint/writer/msl/generator_impl_module_constant_test.cc
index 59cc2eb..2b70da4 100644
--- a/src/tint/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/tint/writer/msl/generator_impl_module_constant_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/id_attribute.h"
 #include "src/tint/writer/msl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::msl {
 namespace {
 
 using MslGeneratorImplTest = TestHelper;
 
 TEST_F(MslGeneratorImplTest, Emit_ModuleConstant) {
-    auto* var = GlobalConst("pos", ty.array<f32, 3>(), array<f32, 3>(1.f, 2.f, 3.f));
+    auto* var = GlobalConst("pos", ty.array<f32, 3>(), array<f32, 3>(1_f, 2_f, 3_f));
 
     GeneratorImpl& gen = Build();
 
@@ -30,7 +32,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, Emit_SpecConstant) {
-    auto* var = Override("pos", ty.f32(), Expr(3.f),
+    auto* var = Override("pos", ty.f32(), Expr(3_f),
                          ast::AttributeList{
                              Id(23),
                          });
diff --git a/src/tint/writer/msl/generator_impl_variable_decl_statement_test.cc b/src/tint/writer/msl/generator_impl_variable_decl_statement_test.cc
index cd8190f..be55cae 100644
--- a/src/tint/writer/msl/generator_impl_variable_decl_statement_test.cc
+++ b/src/tint/writer/msl/generator_impl_variable_decl_statement_test.cc
@@ -16,6 +16,8 @@
 #include "src/tint/ast/variable_decl_statement.h"
 #include "src/tint/writer/msl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::msl {
 namespace {
 
@@ -122,7 +124,7 @@
 }
 
 TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Initializer_Private) {
-    GlobalConst("initializer", ty.f32(), Expr(0.f));
+    GlobalConst("initializer", ty.f32(), Expr(0_f));
     Global("a", ty.f32(), ast::StorageClass::kPrivate, Expr("initializer"));
 
     WrapInFunction(Expr("a"));
diff --git a/src/tint/writer/spirv/builder.cc b/src/tint/writer/spirv/builder.cc
index 72a0962..7d232c0 100644
--- a/src/tint/writer/spirv/builder.cc
+++ b/src/tint/writer/spirv/builder.cc
@@ -746,7 +746,8 @@
             init_id = Switch(
                 type,  //
                 [&](const sem::F32*) {
-                    ast::FloatLiteralExpression l(ProgramID{}, Source{}, 0.0f);
+                    ast::FloatLiteralExpression l(ProgramID{}, Source{}, 0,
+                                                  ast::FloatLiteralExpression::Suffix::kF);
                     return GenerateLiteralIfNeeded(var, &l);
                 },
                 [&](const sem::U32*) {
@@ -1621,8 +1622,13 @@
             }
         },
         [&](const ast::FloatLiteralExpression* f) {
-            constant.kind = ScalarConstant::Kind::kF32;
-            constant.value.f32 = f->value;
+            switch (f->suffix) {
+                case ast::FloatLiteralExpression::Suffix::kNone:
+                case ast::FloatLiteralExpression::Suffix::kF:
+                    constant.kind = ScalarConstant::Kind::kF32;
+                    constant.value.f32 = static_cast<float>(f->value);
+                    return;
+            }
         },
         [&](Default) { error_ = "unknown literal type"; });
 
@@ -2878,7 +2884,8 @@
             }
             spirv_params.emplace_back(gen_arg(Usage::kDepthRef));
 
-            ast::FloatLiteralExpression float_0(ProgramID(), Source{}, 0.0);
+            ast::FloatLiteralExpression float_0(ProgramID(), Source{}, 0.0,
+                                                ast::FloatLiteralExpression::Suffix::kF);
             image_operands.emplace_back(ImageOperand{
                 SpvImageOperandsLodMask, Operand(GenerateLiteralIfNeeded(nullptr, &float_0))});
             break;
diff --git a/src/tint/writer/spirv/builder_accessor_expression_test.cc b/src/tint/writer/spirv/builder_accessor_expression_test.cc
index 67ee185..82fbfd7 100644
--- a/src/tint/writer/spirv/builder_accessor_expression_test.cc
+++ b/src/tint/writer/spirv/builder_accessor_expression_test.cc
@@ -312,7 +312,7 @@
                                          Member("b", ty.f32()),
                                      });
 
-    auto* var = Let("ident", ty.Of(s), Construct(ty.Of(s), 0.f, 0.f));
+    auto* var = Let("ident", ty.Of(s), Construct(ty.Of(s), 0_f, 0_f));
 
     auto* expr = MemberAccessor("ident", "b");
     WrapInFunction(var, expr);
@@ -353,7 +353,7 @@
     auto* s_type = Structure("my_struct", {Member("inner", ty.Of(inner_struct))});
 
     auto* var = Let("ident", ty.Of(s_type),
-                    Construct(ty.Of(s_type), Construct(ty.Of(inner_struct), 0.f, 0.f)));
+                    Construct(ty.Of(s_type), Construct(ty.Of(inner_struct), 0_f, 0_f)));
     auto* expr = MemberAccessor(MemberAccessor("ident", "inner"), "b");
     WrapInFunction(var, expr);
 
@@ -443,7 +443,7 @@
     auto* s_type = Structure("my_struct", {Member("inner", ty.Of(inner_struct))});
 
     auto* var = Var("ident", ty.Of(s_type));
-    auto* expr = Assign(MemberAccessor(MemberAccessor("ident", "inner"), "a"), Expr(2.0f));
+    auto* expr = Assign(MemberAccessor(MemberAccessor("ident", "inner"), "a"), Expr(2_f));
     WrapInFunction(var, expr);
 
     spirv::Builder& b = Build();
@@ -753,8 +753,8 @@
     // pos[1u]
 
     auto* var = Let("pos", ty.array(ty.vec2<f32>(), 3_u),
-                    Construct(ty.array(ty.vec2<f32>(), 3_u), vec2<f32>(0.0f, 0.5f),
-                              vec2<f32>(-0.5f, -0.5f), vec2<f32>(0.5f, -0.5f)));
+                    Construct(ty.array(ty.vec2<f32>(), 3_u), vec2<f32>(0_f, 0.5_f),
+                              vec2<f32>(-0.5_f, -0.5_f), vec2<f32>(0.5_f, -0.5_f)));
 
     auto* expr = IndexAccessor("pos", 1_u);
     WrapInFunction(var, expr);
@@ -796,8 +796,8 @@
     // pos[2u][1u]
 
     auto* var = Let("pos", ty.array(ty.vec2<f32>(), 3_u),
-                    Construct(ty.array(ty.vec2<f32>(), 3_u), vec2<f32>(0.0f, 0.5f),
-                              vec2<f32>(-0.5f, -0.5f), vec2<f32>(0.5f, -0.5f)));
+                    Construct(ty.array(ty.vec2<f32>(), 3_u), vec2<f32>(0_f, 0.5_f),
+                              vec2<f32>(-0.5_f, -0.5_f), vec2<f32>(0.5_f, -0.5_f)));
 
     auto* expr = IndexAccessor(IndexAccessor("pos", 2_u), 1_u);
     WrapInFunction(var, expr);
@@ -837,7 +837,7 @@
     // let pos : vec2<f32> = vec2<f32>(0.0, 0.5);
     // pos[1]
 
-    auto* var = Let("pos", ty.vec2<f32>(), vec2<f32>(0.0f, 0.5f));
+    auto* var = Let("pos", ty.vec2<f32>(), vec2<f32>(0_f, 0.5_f));
 
     auto* expr = IndexAccessor("pos", 1_u);
     WrapInFunction(var, expr);
@@ -867,7 +867,7 @@
     // idx : i32
     // pos[idx]
 
-    auto* var = Let("pos", ty.vec2<f32>(), vec2<f32>(0.0f, 0.5f));
+    auto* var = Let("pos", ty.vec2<f32>(), vec2<f32>(0_f, 0.5_f));
     auto* idx = Var("idx", ty.i32());
     auto* expr = IndexAccessor("pos", idx);
 
@@ -902,7 +902,7 @@
     // let a : array<f32, 3u>;
     // a[2i]
 
-    auto* var = Let("a", ty.array<f32, 3>(), Construct(ty.array<f32, 3>(), 0.0f, 0.5f, 1.0f));
+    auto* var = Let("a", ty.array<f32, 3>(), Construct(ty.array<f32, 3>(), 0_f, 0.5_f, 1_f));
     auto* expr = IndexAccessor("a", 2_i);
     WrapInFunction(var, expr);
 
@@ -937,7 +937,7 @@
     // idx : i32
     // a[idx]
 
-    auto* var = Let("a", ty.array<f32, 3>(), Construct(ty.array<f32, 3>(), 0.0f, 0.5f, 1.0f));
+    auto* var = Let("a", ty.array<f32, 3>(), Construct(ty.array<f32, 3>(), 0_f, 0.5_f, 1_f));
 
     auto* idx = Var("idx", ty.i32());
     auto* expr = IndexAccessor("a", idx);
@@ -986,8 +986,8 @@
     // a[idx]
 
     auto* var = Let("a", ty.mat2x2<f32>(),
-                    Construct(ty.mat2x2<f32>(), Construct(ty.vec2<f32>(), 1.f, 2.f),
-                              Construct(ty.vec2<f32>(), 3.f, 4.f)));
+                    Construct(ty.mat2x2<f32>(), Construct(ty.vec2<f32>(), 1_f, 2_f),
+                              Construct(ty.vec2<f32>(), 3_f, 4_f)));
 
     auto* idx = Var("idx", ty.i32());
     auto* expr = IndexAccessor("a", idx);
diff --git a/src/tint/writer/spirv/builder_assign_test.cc b/src/tint/writer/spirv/builder_assign_test.cc
index 1e02e27..11ac42f 100644
--- a/src/tint/writer/spirv/builder_assign_test.cc
+++ b/src/tint/writer/spirv/builder_assign_test.cc
@@ -25,7 +25,7 @@
 TEST_F(BuilderTest, Assign_Var) {
     auto* v = Global("var", ty.f32(), ast::StorageClass::kPrivate);
 
-    auto* assign = Assign("var", 1.f);
+    auto* assign = Assign("var", 1_f);
 
     WrapInFunction(assign);
 
@@ -53,7 +53,7 @@
 TEST_F(BuilderTest, Assign_Var_OutsideFunction_IsError) {
     auto* v = Global("var", ty.f32(), ast::StorageClass::kPrivate);
 
-    auto* assign = Assign("var", Expr(1.f));
+    auto* assign = Assign("var", Expr(1_f));
 
     WrapInFunction(assign);
 
@@ -99,7 +99,7 @@
 }
 
 TEST_F(BuilderTest, Assign_Var_Complex_ConstructorWithExtract) {
-    auto* init = vec3<f32>(vec2<f32>(1.f, 2.f), 3.f);
+    auto* init = vec3<f32>(vec2<f32>(1_f, 2_f), 3_f);
 
     auto* v = Global("var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
@@ -136,7 +136,7 @@
 }
 
 TEST_F(BuilderTest, Assign_Var_Complex_Constructor) {
-    auto* init = vec3<f32>(1.f, 2.f, 3.f);
+    auto* init = vec3<f32>(1_f, 2_f, 3_f);
 
     auto* v = Global("var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
@@ -183,7 +183,7 @@
 
     auto* v = Var("ident", ty.Of(s));
 
-    auto* assign = Assign(MemberAccessor("ident", "b"), Expr(4.f));
+    auto* assign = Assign(MemberAccessor("ident", "b"), Expr(4_f));
 
     WrapInFunction(v, assign);
 
@@ -215,7 +215,7 @@
 TEST_F(BuilderTest, Assign_Vector) {
     auto* v = Global("var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
-    auto* val = vec3<f32>(1.f, 1.f, 3.f);
+    auto* val = vec3<f32>(1_f, 1_f, 3_f);
     auto* assign = Assign("var", val);
 
     WrapInFunction(assign);
@@ -249,7 +249,7 @@
 
     auto* v = Global("var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
-    auto* assign = Assign(MemberAccessor("var", "y"), Expr(1.f));
+    auto* assign = Assign(MemberAccessor("var", "y"), Expr(1_f));
 
     WrapInFunction(assign);
 
@@ -284,7 +284,7 @@
 
     auto* v = Global("var", ty.vec3<f32>(), ast::StorageClass::kPrivate);
 
-    auto* assign = Assign(IndexAccessor("var", 1_i), Expr(1.f));
+    auto* assign = Assign(IndexAccessor("var", 1_i), Expr(1_f));
 
     WrapInFunction(assign);
 
diff --git a/src/tint/writer/spirv/builder_binary_expression_test.cc b/src/tint/writer/spirv/builder_binary_expression_test.cc
index 17ca134..debe63c 100644
--- a/src/tint/writer/spirv/builder_binary_expression_test.cc
+++ b/src/tint/writer/spirv/builder_binary_expression_test.cc
@@ -195,8 +195,8 @@
 TEST_P(BinaryArithFloatTest, Scalar) {
     auto param = GetParam();
 
-    auto* lhs = Expr(3.2f);
-    auto* rhs = Expr(4.5f);
+    auto* lhs = Expr(3.2_f);
+    auto* rhs = Expr(4.5_f);
 
     auto* expr = create<ast::BinaryExpression>(param.op, lhs, rhs);
 
@@ -218,8 +218,8 @@
 TEST_P(BinaryArithFloatTest, Vector) {
     auto param = GetParam();
 
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(param.op, lhs, rhs);
 
@@ -426,8 +426,8 @@
 TEST_P(BinaryCompareFloatTest, Scalar) {
     auto param = GetParam();
 
-    auto* lhs = Expr(3.2f);
-    auto* rhs = Expr(4.5f);
+    auto* lhs = Expr(3.2_f);
+    auto* rhs = Expr(4.5_f);
 
     auto* expr = create<ast::BinaryExpression>(param.op, lhs, rhs);
 
@@ -450,8 +450,8 @@
 TEST_P(BinaryCompareFloatTest, Vector) {
     auto param = GetParam();
 
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(param.op, lhs, rhs);
 
@@ -483,8 +483,8 @@
                     BinaryData{ast::BinaryOp::kNotEqual, "OpFOrdNotEqual"}));
 
 TEST_F(BuilderTest, Binary_Multiply_VectorScalar) {
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
-    auto* rhs = Expr(1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
+    auto* rhs = Expr(1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
 
@@ -506,8 +506,8 @@
 }
 
 TEST_F(BuilderTest, Binary_Multiply_ScalarVector) {
-    auto* lhs = Expr(1.f);
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = Expr(1_f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, rhs);
 
@@ -531,7 +531,7 @@
 TEST_F(BuilderTest, Binary_Multiply_MatrixScalar) {
     auto* var = Var("mat", ty.mat3x3<f32>());
 
-    auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, Expr("mat"), Expr(1.f));
+    auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, Expr("mat"), Expr(1_f));
 
     WrapInFunction(var, expr);
 
@@ -558,7 +558,7 @@
 TEST_F(BuilderTest, Binary_Multiply_ScalarMatrix) {
     auto* var = Var("mat", ty.mat3x3<f32>());
 
-    auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, Expr(1.f), Expr("mat"));
+    auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, Expr(1_f), Expr("mat"));
 
     WrapInFunction(var, expr);
 
@@ -584,7 +584,7 @@
 
 TEST_F(BuilderTest, Binary_Multiply_MatrixVector) {
     auto* var = Var("mat", ty.mat3x3<f32>());
-    auto* rhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* rhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, Expr("mat"), rhs);
 
@@ -613,7 +613,7 @@
 
 TEST_F(BuilderTest, Binary_Multiply_VectorMatrix) {
     auto* var = Var("mat", ty.mat3x3<f32>());
-    auto* lhs = vec3<f32>(1.f, 1.f, 1.f);
+    auto* lhs = vec3<f32>(1_f, 1_f, 1_f);
 
     auto* expr = create<ast::BinaryExpression>(ast::BinaryOp::kMultiply, lhs, Expr("mat"));
 
@@ -899,7 +899,7 @@
 static const ast::Expression* MakeVectorExpr(ProgramBuilder* builder, Type type) {
     switch (type) {
         case Type::f32:
-            return builder->vec3<f32>(1.f, 1.f, 1.f);
+            return builder->vec3<f32>(1_f, 1_f, 1_f);
         case Type::i32:
             return builder->vec3<i32>(1_i, 1_i, 1_i);
         case Type::u32:
@@ -910,7 +910,7 @@
 static const ast::Expression* MakeScalarExpr(ProgramBuilder* builder, Type type) {
     switch (type) {
         case Type::f32:
-            return builder->Expr(1.f);
+            return builder->Expr(1_f);
         case Type::i32:
             return builder->Expr(1_i);
         case Type::u32:
diff --git a/src/tint/writer/spirv/builder_bitcast_expression_test.cc b/src/tint/writer/spirv/builder_bitcast_expression_test.cc
index 073d000..9dff5f6 100644
--- a/src/tint/writer/spirv/builder_bitcast_expression_test.cc
+++ b/src/tint/writer/spirv/builder_bitcast_expression_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/writer/spirv/spv_dump.h"
 #include "src/tint/writer/spirv/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::spirv {
 namespace {
 
 using BuilderTest = TestHelper;
 
 TEST_F(BuilderTest, Bitcast) {
-    auto* bitcast = create<ast::BitcastExpression>(ty.u32(), Expr(2.4f));
+    auto* bitcast = create<ast::BitcastExpression>(ty.u32(), Expr(2.4_f));
 
     WrapInFunction(bitcast);
 
@@ -40,7 +42,7 @@
 }
 
 TEST_F(BuilderTest, Bitcast_DuplicateType) {
-    auto* bitcast = create<ast::BitcastExpression>(ty.f32(), Expr(2.4f));
+    auto* bitcast = create<ast::BitcastExpression>(ty.f32(), Expr(2.4_f));
 
     WrapInFunction(bitcast);
 
diff --git a/src/tint/writer/spirv/builder_block_test.cc b/src/tint/writer/spirv/builder_block_test.cc
index ea70b6c..85a2371 100644
--- a/src/tint/writer/spirv/builder_block_test.cc
+++ b/src/tint/writer/spirv/builder_block_test.cc
@@ -15,6 +15,8 @@
 #include "src/tint/writer/spirv/spv_dump.h"
 #include "src/tint/writer/spirv/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::spirv {
 namespace {
 
@@ -23,9 +25,9 @@
 TEST_F(BuilderTest, Block) {
     // Note, this test uses shadow variables which aren't allowed in WGSL but
     // serves to prove the block code is pushing new scopes as needed.
-    auto* inner = Block(Decl(Var("var", ty.f32(), ast::StorageClass::kNone)), Assign("var", 2.f));
-    auto* outer = Block(Decl(Var("var", ty.f32(), ast::StorageClass::kNone)), Assign("var", 1.f),
-                        inner, Assign("var", 3.f));
+    auto* inner = Block(Decl(Var("var", ty.f32(), ast::StorageClass::kNone)), Assign("var", 2_f));
+    auto* outer = Block(Decl(Var("var", ty.f32(), ast::StorageClass::kNone)), Assign("var", 1_f),
+                        inner, Assign("var", 3_f));
 
     WrapInFunction(outer);
 
diff --git a/src/tint/writer/spirv/builder_builtin_test.cc b/src/tint/writer/spirv/builder_builtin_test.cc
index 901abad..6d1316e 100644
--- a/src/tint/writer/spirv/builder_builtin_test.cc
+++ b/src/tint/writer/spirv/builder_builtin_test.cc
@@ -463,8 +463,8 @@
                                create<ast::GroupAttribute>(0),
                            });
 
-    auto* expr1 = Call("textureSampleCompare", "texture", "sampler", vec2<f32>(1.0f, 2.0f), 2.0f);
-    auto* expr2 = Call("textureSampleCompare", "texture", "sampler", vec2<f32>(1.0f, 2.0f), 2.0f);
+    auto* expr1 = Call("textureSampleCompare", "texture", "sampler", vec2<f32>(1_f, 2_f), 2_f);
+    auto* expr2 = Call("textureSampleCompare", "texture", "sampler", vec2<f32>(1_f, 2_f), 2_f);
 
     Func("f1", {}, ty.void_(), {CallStmt(expr1)}, {});
     Func("f2", {}, ty.void_(), {CallStmt(expr2)}, {});
@@ -539,7 +539,7 @@
 using Builtin_Builtin_SingleParam_Float_Test = BuiltinBuilderTestWithParam<BuiltinData>;
 TEST_P(Builtin_Builtin_SingleParam_Float_Test, Call_Scalar) {
     auto param = GetParam();
-    auto* expr = Call(param.name, 1.0f);
+    auto* expr = Call(param.name, 1_f);
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -566,7 +566,7 @@
 
 TEST_P(Builtin_Builtin_SingleParam_Float_Test, Call_Vector) {
     auto param = GetParam();
-    auto* expr = Call(param.name, vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call(param.name, vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -620,7 +620,7 @@
                                          BuiltinData{"trunc", "Trunc"}));
 
 TEST_F(BuiltinBuilderTest, Call_Length_Scalar) {
-    auto* expr = Call("length", 1.0f);
+    auto* expr = Call("length", 1_f);
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -645,7 +645,7 @@
 }
 
 TEST_F(BuiltinBuilderTest, Call_Length_Vector) {
-    auto* expr = Call("length", vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call("length", vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -672,7 +672,7 @@
 }
 
 TEST_F(BuiltinBuilderTest, Call_Normalize) {
-    auto* expr = Call("normalize", vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call("normalize", vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -701,7 +701,7 @@
 using Builtin_Builtin_DualParam_Float_Test = BuiltinBuilderTestWithParam<BuiltinData>;
 TEST_P(Builtin_Builtin_DualParam_Float_Test, Call_Scalar) {
     auto param = GetParam();
-    auto* expr = Call(param.name, 1.0f, 1.0f);
+    auto* expr = Call(param.name, 1_f, 1_f);
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -728,7 +728,7 @@
 
 TEST_P(Builtin_Builtin_DualParam_Float_Test, Call_Vector) {
     auto param = GetParam();
-    auto* expr = Call(param.name, vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call(param.name, vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -763,7 +763,7 @@
                                          BuiltinData{"step", "Step"}));
 
 TEST_F(BuiltinBuilderTest, Call_Reflect_Vector) {
-    auto* expr = Call("reflect", vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call("reflect", vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -790,7 +790,7 @@
 }
 
 TEST_F(BuiltinBuilderTest, Call_Distance_Scalar) {
-    auto* expr = Call("distance", 1.0f, 1.0f);
+    auto* expr = Call("distance", 1_f, 1_f);
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -815,7 +815,7 @@
 }
 
 TEST_F(BuiltinBuilderTest, Call_Distance_Vector) {
-    auto* expr = Call("distance", vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call("distance", vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -842,7 +842,7 @@
 }
 
 TEST_F(BuiltinBuilderTest, Call_Cross) {
-    auto* expr = Call("cross", vec3<f32>(1.0f, 1.0f, 1.0f), vec3<f32>(1.0f, 1.0f, 1.0f));
+    auto* expr = Call("cross", vec3<f32>(1_f, 1_f, 1_f), vec3<f32>(1_f, 1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -871,7 +871,7 @@
 using Builtin_Builtin_ThreeParam_Float_Test = BuiltinBuilderTestWithParam<BuiltinData>;
 TEST_P(Builtin_Builtin_ThreeParam_Float_Test, Call_Scalar) {
     auto param = GetParam();
-    auto* expr = Call(param.name, 1.0f, 1.0f, 1.0f);
+    auto* expr = Call(param.name, 1_f, 1_f, 1_f);
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -898,8 +898,7 @@
 
 TEST_P(Builtin_Builtin_ThreeParam_Float_Test, Call_Vector) {
     auto param = GetParam();
-    auto* expr =
-        Call(param.name, vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call(param.name, vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -934,8 +933,7 @@
                                          BuiltinData{"smoothstep", "SmoothStep"}));
 
 TEST_F(BuiltinBuilderTest, Call_FaceForward_Vector) {
-    auto* expr =
-        Call("faceForward", vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f), vec2<f32>(1.0f, 1.0f));
+    auto* expr = Call("faceForward", vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f), vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(),
                       {
                           Assign(Phony(), expr),
@@ -1312,7 +1310,7 @@
                          testing::Values(BuiltinData{"clamp", "UClamp"}));
 
 TEST_F(BuiltinBuilderTest, Call_Modf) {
-    auto* expr = Call("modf", vec2<f32>(1.0f, 2.0f));
+    auto* expr = Call("modf", vec2<f32>(1_f, 2_f));
     Func("a_func", {}, ty.void_(), {CallStmt(expr)}, {Stage(ast::PipelineStage::kFragment)});
 
     spirv::Builder& b = Build();
@@ -1350,7 +1348,7 @@
 }
 
 TEST_F(BuiltinBuilderTest, Call_Frexp) {
-    auto* expr = Call("frexp", vec2<f32>(1.0f, 2.0f));
+    auto* expr = Call("frexp", vec2<f32>(1_f, 2_f));
     Func("a_func", {}, ty.void_(), {CallStmt(expr)}, {Stage(ast::PipelineStage::kFragment)});
 
     spirv::Builder& b = Build();
@@ -2104,8 +2102,8 @@
     auto param = GetParam();
 
     bool pack4 = param.name == "pack4x8snorm" || param.name == "pack4x8unorm";
-    auto* call = pack4 ? Call(param.name, vec4<float>(1.0f, 1.0f, 1.0f, 1.0f))
-                       : Call(param.name, vec2<float>(1.0f, 1.0f));
+    auto* call = pack4 ? Call(param.name, vec4<f32>(1_f, 1_f, 1_f, 1_f))
+                       : Call(param.name, vec2<f32>(1_f, 1_f));
     auto* func = Func("a_func", {}, ty.void_(), {CallStmt(call)});
 
     spirv::Builder& b = Build();
diff --git a/src/tint/writer/spirv/builder_call_test.cc b/src/tint/writer/spirv/builder_call_test.cc
index 782b008..b81ca96 100644
--- a/src/tint/writer/spirv/builder_call_test.cc
+++ b/src/tint/writer/spirv/builder_call_test.cc
@@ -17,6 +17,8 @@
 #include "src/tint/writer/spirv/spv_dump.h"
 #include "src/tint/writer/spirv/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::spirv {
 namespace {
 
@@ -28,7 +30,7 @@
     func_params.push_back(Param("b", ty.f32()));
 
     auto* a_func = Func("a_func", func_params, ty.f32(), {Return(Add("a", "b"))});
-    auto* func = Func("main", {}, ty.void_(), {Assign(Phony(), Call("a_func", 1.f, 1.f))});
+    auto* func = Func("main", {}, ty.void_(), {Assign(Phony(), Call("a_func", 1_f, 1_f))});
 
     spirv::Builder& b = Build();
 
@@ -66,7 +68,7 @@
 
     auto* a_func = Func("a_func", func_params, ty.f32(), {Return(Add("a", "b"))});
 
-    auto* func = Func("main", {}, ty.void_(), {CallStmt(Call("a_func", 1.f, 1.f))});
+    auto* func = Func("main", {}, ty.void_(), {CallStmt(Call("a_func", 1_f, 1_f))});
 
     spirv::Builder& b = Build();
 
diff --git a/src/tint/writer/spirv/builder_constructor_expression_test.cc b/src/tint/writer/spirv/builder_constructor_expression_test.cc
index 41409af..ec69cfb 100644
--- a/src/tint/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/tint/writer/spirv/builder_constructor_expression_test.cc
@@ -23,7 +23,7 @@
 using SpvBuilderConstructorTest = TestHelper;
 
 TEST_F(SpvBuilderConstructorTest, Const) {
-    auto* c = Expr(42.2f);
+    auto* c = Expr(42.2_f);
     auto* g = Global("g", ty.f32(), c, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -50,7 +50,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type) {
-    auto* t = vec3<f32>(1.0f, 1.0f, 3.0f);
+    auto* t = vec3<f32>(1_f, 1_f, 3_f);
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -94,7 +94,7 @@
     // cast<Int>(2.3f)
 
     auto* alias = Alias("Int", ty.i32());
-    auto* cast = Construct(ty.Of(alias), 2.3f);
+    auto* cast = Construct(ty.Of(alias), 2.3_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -114,7 +114,7 @@
 TEST_F(SpvBuilderConstructorTest, Type_IdentifierExpression_Param) {
     auto* var = Var("ident", ty.f32());
 
-    auto* t = vec2<f32>(1.0f, "ident");
+    auto* t = vec2<f32>(1_f, "ident");
     WrapInFunction(var, t);
 
     spirv::Builder& b = Build();
@@ -213,7 +213,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_F32_With_F32) {
-    auto* cast = Construct<f32>(2.0f);
+    auto* cast = Construct<f32>(2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -269,7 +269,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec2_With_F32_Literal) {
-    auto* cast = vec2<f32>(2.0f);
+    auto* cast = vec2<f32>(2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -286,7 +286,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec2_With_F32_Var) {
-    auto* var = Var("v", nullptr, Expr(2.0f));
+    auto* var = Var("v", nullptr, Expr(2_f));
     auto* cast = vec2<f32>(var);
     WrapInFunction(var, cast);
 
@@ -309,7 +309,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec2_With_F32_F32) {
-    auto* cast = vec2<f32>(2.0f, 2.0f);
+    auto* cast = vec2<f32>(2_f, 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -325,7 +325,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec2_With_Vec2) {
-    auto* value = vec2<f32>(2.0f, 2.0f);
+    auto* value = vec2<f32>(2_f, 2_f);
     auto* cast = vec2<f32>(value);
     WrapInFunction(cast);
 
@@ -343,7 +343,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec3_With_F32) {
-    auto* cast = vec3<f32>(2.0f);
+    auto* cast = vec3<f32>(2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -375,7 +375,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec3_With_F32_F32_F32) {
-    auto* cast = vec3<f32>(2.0f, 2.0f, 2.0f);
+    auto* cast = vec3<f32>(2_f, 2_f, 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -391,7 +391,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec3_With_F32_Vec2) {
-    auto* cast = vec3<f32>(2.0f, vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec3<f32>(2_f, vec2<f32>(2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -413,7 +413,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec3_With_Vec2_F32) {
-    auto* cast = vec3<f32>(vec2<f32>(2.0f, 2.0f), 2.0f);
+    auto* cast = vec3<f32>(vec2<f32>(2_f, 2_f), 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -435,7 +435,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec3_With_Vec3) {
-    auto* value = vec3<f32>(2.0f, 2.0f, 2.0f);
+    auto* value = vec3<f32>(2_f, 2_f, 2_f);
     auto* cast = vec3<f32>(value);
     WrapInFunction(cast);
 
@@ -469,7 +469,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_F32) {
-    auto* cast = vec4<f32>(2.0f);
+    auto* cast = vec4<f32>(2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -485,7 +485,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_F32_F32_F32_F32) {
-    auto* cast = vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f);
+    auto* cast = vec4<f32>(2_f, 2_f, 2_f, 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -501,7 +501,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_F32_F32_Vec2) {
-    auto* cast = vec4<f32>(2.0f, 2.0f, vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec4<f32>(2_f, 2_f, vec2<f32>(2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -523,7 +523,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_F32_Vec2_F32) {
-    auto* cast = vec4<f32>(2.0f, vec2<f32>(2.0f, 2.0f), 2.0f);
+    auto* cast = vec4<f32>(2_f, vec2<f32>(2_f, 2_f), 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -545,7 +545,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_Vec2_F32_F32) {
-    auto* cast = vec4<f32>(vec2<f32>(2.0f, 2.0f), 2.0f, 2.0f);
+    auto* cast = vec4<f32>(vec2<f32>(2_f, 2_f), 2_f, 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -567,7 +567,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_Vec2_Vec2) {
-    auto* cast = vec4<f32>(vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec4<f32>(vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -591,7 +591,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_F32_Vec3) {
-    auto* cast = vec4<f32>(2.0f, vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* cast = vec4<f32>(2_f, vec3<f32>(2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -614,7 +614,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_Vec3_F32) {
-    auto* cast = vec4<f32>(vec3<f32>(2.0f, 2.0f, 2.0f), 2.0f);
+    auto* cast = vec4<f32>(vec3<f32>(2_f, 2_f, 2_f), 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -637,7 +637,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Vec4_With_Vec4) {
-    auto* value = vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f);
+    auto* value = vec4<f32>(2_f, 2_f, 2_f, 2_f);
     auto* cast = vec4<f32>(value);
     WrapInFunction(cast);
 
@@ -655,7 +655,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_F32_With_F32) {
-    auto* ctor = Construct<f32>(2.0f);
+    auto* ctor = Construct<f32>(2_f);
     GlobalConst("g", ty.f32(), ctor);
 
     spirv::Builder& b = SanitizeAndBuild();
@@ -670,7 +670,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_U32_With_F32) {
-    auto* ctor = Construct<u32>(1.5f);
+    auto* ctor = Construct<u32>(1.5_f);
     GlobalConst("g", ty.u32(), ctor);
 
     spirv::Builder& b = SanitizeAndBuild();
@@ -685,7 +685,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec2_With_F32) {
-    auto* cast = vec2<f32>(2.0f);
+    auto* cast = vec2<f32>(2_f);
     auto* g = Global("g", ty.vec2<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -701,7 +701,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec2_With_Vec2) {
-    auto* cast = vec2<f32>(vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec2<f32>(vec2<f32>(2_f, 2_f));
     GlobalConst("a", ty.vec2<f32>(), cast);
 
     spirv::Builder& b = SanitizeAndBuild();
@@ -719,7 +719,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec3_With_Vec3) {
-    auto* cast = vec3<f32>(vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* cast = vec3<f32>(vec3<f32>(2_f, 2_f, 2_f));
     GlobalConst("a", ty.vec3<f32>(), cast);
 
     spirv::Builder& b = SanitizeAndBuild();
@@ -737,7 +737,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_Vec4) {
-    auto* cast = vec4<f32>(vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f));
+    auto* cast = vec4<f32>(vec4<f32>(2_f, 2_f, 2_f, 2_f));
     GlobalConst("a", ty.vec4<f32>(), cast);
 
     spirv::Builder& b = SanitizeAndBuild();
@@ -755,7 +755,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec3_With_F32) {
-    auto* cast = vec3<f32>(2.0f);
+    auto* cast = vec3<f32>(2_f);
     auto* g = Global("g", ty.vec3<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -771,7 +771,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec3_With_F32_Vec2) {
-    auto* cast = vec3<f32>(2.0f, vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec3<f32>(2_f, vec2<f32>(2_f, 2_f));
     auto* g = Global("g", ty.vec3<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -794,7 +794,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec3_With_Vec2_F32) {
-    auto* cast = vec3<f32>(vec2<f32>(2.0f, 2.0f), 2.0f);
+    auto* cast = vec3<f32>(vec2<f32>(2_f, 2_f), 2_f);
     auto* g = Global("g", ty.vec3<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -817,7 +817,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_F32) {
-    auto* cast = vec4<f32>(2.0f);
+    auto* cast = vec4<f32>(2_f);
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -833,7 +833,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_F32_F32_Vec2) {
-    auto* cast = vec4<f32>(2.0f, 2.0f, vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec4<f32>(2_f, 2_f, vec2<f32>(2_f, 2_f));
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -856,7 +856,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_F32_Vec2_F32) {
-    auto* cast = vec4<f32>(2.0f, vec2<f32>(2.0f, 2.0f), 2.0f);
+    auto* cast = vec4<f32>(2_f, vec2<f32>(2_f, 2_f), 2_f);
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -879,7 +879,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_Vec2_F32_F32) {
-    auto* cast = vec4<f32>(vec2<f32>(2.0f, 2.0f), 2.0f, 2.0f);
+    auto* cast = vec4<f32>(vec2<f32>(2_f, 2_f), 2_f, 2_f);
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -902,7 +902,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_Vec2_Vec2) {
-    auto* cast = vec4<f32>(vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f));
+    auto* cast = vec4<f32>(vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f));
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -927,7 +927,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_F32_Vec3) {
-    auto* cast = vec4<f32>(2.0f, vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* cast = vec4<f32>(2_f, vec3<f32>(2_f, 2_f, 2_f));
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -952,7 +952,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_ModuleScope_Vec4_With_Vec3_F32) {
-    auto* cast = vec4<f32>(vec3<f32>(2.0f, 2.0f, 2.0f), 2.0f);
+    auto* cast = vec4<f32>(vec3<f32>(2_f, 2_f, 2_f), 2_f);
     auto* g = Global("g", ty.vec4<f32>(), cast, ast::StorageClass::kPrivate);
 
     spirv::Builder& b = Build();
@@ -977,7 +977,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat2x2_With_Vec2_Vec2) {
-    auto* cast = mat2x2<f32>(vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f));
+    auto* cast = mat2x2<f32>(vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -995,7 +995,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat3x2_With_Vec2_Vec2_Vec2) {
-    auto* cast = mat3x2<f32>(vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f));
+    auto* cast = mat3x2<f32>(vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1013,8 +1013,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat4x2_With_Vec2_Vec2_Vec2_Vec2) {
-    auto* cast = mat4x2<f32>(vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f), vec2<f32>(2.0f, 2.0f),
-                             vec2<f32>(2.0f, 2.0f));
+    auto* cast = mat4x2<f32>(vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f), vec2<f32>(2_f, 2_f),
+                             vec2<f32>(2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1032,7 +1032,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat2x3_With_Vec3_Vec3) {
-    auto* cast = mat2x3<f32>(vec3<f32>(2.0f, 2.0f, 2.0f), vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* cast = mat2x3<f32>(vec3<f32>(2_f, 2_f, 2_f), vec3<f32>(2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1050,8 +1050,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat3x3_With_Vec3_Vec3_Vec3) {
-    auto* cast = mat3x3<f32>(vec3<f32>(2.0f, 2.0f, 2.0f), vec3<f32>(2.0f, 2.0f, 2.0f),
-                             vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* cast =
+        mat3x3<f32>(vec3<f32>(2_f, 2_f, 2_f), vec3<f32>(2_f, 2_f, 2_f), vec3<f32>(2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1069,8 +1069,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat4x3_With_Vec3_Vec3_Vec3_Vec3) {
-    auto* cast = mat4x3<f32>(vec3<f32>(2.0f, 2.0f, 2.0f), vec3<f32>(2.0f, 2.0f, 2.0f),
-                             vec3<f32>(2.0f, 2.0f, 2.0f), vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* cast = mat4x3<f32>(vec3<f32>(2_f, 2_f, 2_f), vec3<f32>(2_f, 2_f, 2_f),
+                             vec3<f32>(2_f, 2_f, 2_f), vec3<f32>(2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1088,7 +1088,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat2x4_With_Vec4_Vec4) {
-    auto* cast = mat2x4<f32>(vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f), vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f));
+    auto* cast = mat2x4<f32>(vec4<f32>(2_f, 2_f, 2_f, 2_f), vec4<f32>(2_f, 2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1106,8 +1106,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat3x4_With_Vec4_Vec4_Vec4) {
-    auto* cast = mat3x4<f32>(vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f), vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f),
-                             vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f));
+    auto* cast = mat3x4<f32>(vec4<f32>(2_f, 2_f, 2_f, 2_f), vec4<f32>(2_f, 2_f, 2_f, 2_f),
+                             vec4<f32>(2_f, 2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1125,8 +1125,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Mat4x4_With_Vec4_Vec4_Vec4_Vec4) {
-    auto* cast = mat4x4<f32>(vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f), vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f),
-                             vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f), vec4<f32>(2.0f, 2.0f, 2.0f, 2.0f));
+    auto* cast = mat4x4<f32>(vec4<f32>(2_f, 2_f, 2_f, 2_f), vec4<f32>(2_f, 2_f, 2_f, 2_f),
+                             vec4<f32>(2_f, 2_f, 2_f, 2_f), vec4<f32>(2_f, 2_f, 2_f, 2_f));
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1144,7 +1144,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Array_5_F32) {
-    auto* cast = array<f32, 5>(2.0f, 2.0f, 2.0f, 2.0f, 2.0f);
+    auto* cast = array<f32, 5>(2_f, 2_f, 2_f, 2_f, 2_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1162,8 +1162,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Array_2_Vec3) {
-    auto* first = vec3<f32>(1.f, 2.f, 3.f);
-    auto* second = vec3<f32>(1.f, 2.f, 3.f);
+    auto* first = vec3<f32>(1_f, 2_f, 3_f);
+    auto* second = vec3<f32>(1_f, 2_f, 3_f);
     auto* t = Construct(ty.array(ty.vec3<f32>(), 2_u), first, second);
     WrapInFunction(t);
     spirv::Builder& b = Build();
@@ -1184,8 +1184,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, CommonInitializer_TwoVectors) {
-    auto* v1 = vec3<f32>(2.0f, 2.0f, 2.0f);
-    auto* v2 = vec3<f32>(2.0f, 2.0f, 2.0f);
+    auto* v1 = vec3<f32>(2_f, 2_f, 2_f);
+    auto* v2 = vec3<f32>(2_f, 2_f, 2_f);
     ast::StatementList stmts = {
         WrapInStatement(v1),
         WrapInStatement(v2),
@@ -1206,8 +1206,8 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, CommonInitializer_TwoArrays) {
-    auto* a1 = array<f32, 3>(2.0f, 2.0f, 2.0f);
-    auto* a2 = array<f32, 3>(2.0f, 2.0f, 2.0f);
+    auto* a1 = array<f32, 3>(2_f, 2_f, 2_f);
+    auto* a2 = array<f32, 3>(2_f, 2_f, 2_f);
     ast::StatementList stmts = {
         WrapInStatement(a1),
         WrapInStatement(a2),
@@ -1233,8 +1233,8 @@
     // Test that initializers of different types with the same values produce
     // different OpConstantComposite instructions.
     // crbug.com/tint/777
-    auto* a1 = array<f32, 2>(1.0f, 2.0f);
-    auto* a2 = vec2<f32>(1.0f, 2.0f);
+    auto* a1 = array<f32, 2>(1_f, 2_f);
+    auto* a2 = vec2<f32>(1_f, 2_f);
     ast::StatementList stmts = {
         WrapInStatement(a1),
         WrapInStatement(a2),
@@ -1264,7 +1264,7 @@
                                          Member("b", ty.vec3<f32>()),
                                      });
 
-    auto* t = Construct(ty.Of(s), 2.0f, vec3<f32>(2.0f, 2.0f, 2.0f));
+    auto* t = Construct(ty.Of(s), 2_f, vec3<f32>(2_f, 2_f, 2_f));
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -1463,7 +1463,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Convert_F32_To_I32) {
-    auto* cast = Construct<i32>(2.4f);
+    auto* cast = Construct<i32>(2.4_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1481,7 +1481,7 @@
 }
 
 TEST_F(SpvBuilderConstructorTest, Type_Convert_F32_To_U32) {
-    auto* cast = Construct<u32>(2.4f);
+    auto* cast = Construct<u32>(2.4_f);
     WrapInFunction(cast);
 
     spirv::Builder& b = Build();
@@ -1692,7 +1692,7 @@
 
 TEST_F(SpvBuilderConstructorTest, IsConstructorConst_GlobalVectorWithAllConstConstructors) {
     // vec3<f32>(1.0, 2.0, 3.0)  -> true
-    auto* t = vec3<f32>(1.f, 2.f, 3.f);
+    auto* t = vec3<f32>(1_f, 2_f, 3_f);
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -1704,8 +1704,8 @@
 TEST_F(SpvBuilderConstructorTest, IsConstructorConst_GlobalArrayWithAllConstConstructors) {
     // array<vec3<f32>, 2u>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(1.0, 2.0, 3.0))
     //   -> true
-    auto* t = Construct(ty.array(ty.vec3<f32>(), 2_u), vec3<f32>(1.f, 2.f, 3.f),
-                        vec3<f32>(1.f, 2.f, 3.f));
+    auto* t = Construct(ty.array(ty.vec3<f32>(), 2_u), vec3<f32>(1_f, 2_f, 3_f),
+                        vec3<f32>(1_f, 2_f, 3_f));
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -1717,7 +1717,7 @@
 TEST_F(SpvBuilderConstructorTest, IsConstructorConst_GlobalVectorWithMatchingTypeConstructors) {
     // vec2<f32>(f32(1.0), f32(2.0))  -> false
 
-    auto* t = vec2<f32>(Construct<f32>(1.f), Construct<f32>(2.f));
+    auto* t = vec2<f32>(Construct<f32>(1_f), Construct<f32>(2_f));
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -1741,7 +1741,7 @@
 TEST_F(SpvBuilderConstructorTest, IsConstructorConst_VectorWithAllConstConstructors) {
     // vec3<f32>(1.0, 2.0, 3.0)  -> true
 
-    auto* t = vec3<f32>(1.f, 2.f, 3.f);
+    auto* t = vec3<f32>(1_f, 2_f, 3_f);
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -1770,8 +1770,8 @@
     // array<vec3<f32>, 2u>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(1.0, 2.0, 3.0))
     //   -> true
 
-    auto* first = vec3<f32>(1.f, 2.f, 3.f);
-    auto* second = vec3<f32>(1.f, 2.f, 3.f);
+    auto* first = vec3<f32>(1_f, 2_f, 3_f);
+    auto* second = vec3<f32>(1_f, 2_f, 3_f);
 
     auto* t = Construct(ty.array(ty.vec3<f32>(), 2_u), first, second);
     WrapInFunction(t);
@@ -1810,7 +1810,7 @@
                                          Member("b", ty.vec3<f32>()),
                                      });
 
-    auto* t = Construct(ty.Of(s), 2.f, vec3<f32>(2.f, 2.f, 2.f));
+    auto* t = Construct(ty.Of(s), 2_f, vec3<f32>(2_f, 2_f, 2_f));
     WrapInFunction(t);
 
     spirv::Builder& b = Build();
@@ -1843,8 +1843,8 @@
     // }
     // let y = vec3<f32>(1.0, 2.0, 3.0); // Reuses the ID 'x'
 
-    WrapInFunction(If(true, Block(Decl(Let("x", nullptr, vec3<f32>(1.f, 2.f, 3.f))))),
-                   Decl(Let("y", nullptr, vec3<f32>(1.f, 2.f, 3.f))));
+    WrapInFunction(If(true, Block(Decl(Let("x", nullptr, vec3<f32>(1_f, 2_f, 3_f))))),
+                   Decl(Let("y", nullptr, vec3<f32>(1_f, 2_f, 3_f))));
 
     spirv::Builder& b = SanitizeAndBuild();
     ASSERT_TRUE(b.Build());
@@ -1887,9 +1887,9 @@
     // }
     // let y = vec3<f32>(one, 2.0, 3.0); // Mustn't reuse the ID 'x'
 
-    WrapInFunction(Decl(Var("one", nullptr, Expr(1.f))),
-                   If(true, Block(Decl(Let("x", nullptr, vec3<f32>("one", 2.f, 3.f))))),
-                   Decl(Let("y", nullptr, vec3<f32>("one", 2.f, 3.f))));
+    WrapInFunction(Decl(Var("one", nullptr, Expr(1_f))),
+                   If(true, Block(Decl(Let("x", nullptr, vec3<f32>("one", 2_f, 3_f))))),
+                   Decl(Let("y", nullptr, vec3<f32>("one", 2_f, 3_f))));
 
     spirv::Builder& b = SanitizeAndBuild();
     ASSERT_TRUE(b.Build());
diff --git a/src/tint/writer/spirv/builder_entry_point_test.cc b/src/tint/writer/spirv/builder_entry_point_test.cc
index a38bb8e..50398a3 100644
--- a/src/tint/writer/spirv/builder_entry_point_test.cc
+++ b/src/tint/writer/spirv/builder_entry_point_test.cc
@@ -118,8 +118,8 @@
         create<ast::BinaryExpression>(ast::BinaryOp::kGreaterThan, Expr("loc_in"), Expr(10_u));
     Func("frag_main", ast::VariableList{loc_in}, ty.f32(),
          ast::StatementList{
-             If(cond, Block(Return(0.5f))),
-             Return(1.0f),
+             If(cond, Block(Return(0.5_f))),
+             Return(1_f),
          },
          ast::AttributeList{
              Stage(ast::PipelineStage::kFragment),
@@ -204,7 +204,7 @@
             Member("pos", ty.vec4<f32>(), ast::AttributeList{Builtin(ast::Builtin::kPosition)}),
         });
 
-    auto* vert_retval = Construct(ty.Of(interface), 42.f, Construct(ty.vec4<f32>()));
+    auto* vert_retval = Construct(ty.Of(interface), 42_f, Construct(ty.vec4<f32>()));
     Func("vert_main", ast::VariableList{}, ty.Of(interface), {Return(vert_retval)},
          {Stage(ast::PipelineStage::kVertex)});
 
diff --git a/src/tint/writer/spirv/builder_function_attribute_test.cc b/src/tint/writer/spirv/builder_function_attribute_test.cc
index f4fdf6e..e5bb43d 100644
--- a/src/tint/writer/spirv/builder_function_attribute_test.cc
+++ b/src/tint/writer/spirv/builder_function_attribute_test.cc
@@ -244,7 +244,7 @@
 TEST_F(BuilderTest, Decoration_ExecutionMode_FragDepth) {
     Func("main", ast::VariableList{}, ty.f32(),
          ast::StatementList{
-             Return(Expr(1.f)),
+             Return(Expr(1_f)),
          },
          ast::AttributeList{Stage(ast::PipelineStage::kFragment)},
          ast::AttributeList{
diff --git a/src/tint/writer/spirv/builder_function_variable_test.cc b/src/tint/writer/spirv/builder_function_variable_test.cc
index a3989a0..da72233 100644
--- a/src/tint/writer/spirv/builder_function_variable_test.cc
+++ b/src/tint/writer/spirv/builder_function_variable_test.cc
@@ -15,6 +15,8 @@
 #include "src/tint/writer/spirv/spv_dump.h"
 #include "src/tint/writer/spirv/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::spirv {
 namespace {
 
@@ -42,7 +44,7 @@
 }
 
 TEST_F(BuilderTest, FunctionVar_WithConstantConstructor) {
-    auto* init = vec3<f32>(1.f, 1.f, 3.f);
+    auto* init = vec3<f32>(1_f, 1_f, 3_f);
     auto* v = Var("var", ty.vec3<f32>(), ast::StorageClass::kFunction, init);
     WrapInFunction(v);
 
@@ -71,7 +73,7 @@
 }
 
 TEST_F(BuilderTest, FunctionVar_WithNonConstantConstructor) {
-    auto* init = vec2<f32>(1.f, Add(3.f, 3.f));
+    auto* init = vec2<f32>(1_f, Add(3_f, 3_f));
 
     auto* v = Var("var", ty.vec2<f32>(), ast::StorageClass::kNone, init);
     WrapInFunction(v);
@@ -105,7 +107,7 @@
     // var v : f32 = 1.0;
     // var v2 : f32 = v; // Should generate the load and store automatically.
 
-    auto* v = Var("v", ty.f32(), ast::StorageClass::kNone, Expr(1.f));
+    auto* v = Var("v", ty.f32(), ast::StorageClass::kNone, Expr(1_f));
 
     auto* v2 = Var("v2", ty.f32(), ast::StorageClass::kNone, Expr("v"));
     WrapInFunction(v, v2);
@@ -140,7 +142,7 @@
     // var v : f32 = 1.0;
     // let v2 : f32 = v; // Should generate the load
 
-    auto* v = Var("v", ty.f32(), ast::StorageClass::kNone, Expr(1.f));
+    auto* v = Var("v", ty.f32(), ast::StorageClass::kNone, Expr(1_f));
 
     auto* v2 = Var("v2", ty.f32(), ast::StorageClass::kNone, Expr("v"));
     WrapInFunction(v, v2);
@@ -172,7 +174,7 @@
 }
 
 TEST_F(BuilderTest, FunctionVar_Const) {
-    auto* init = vec3<f32>(1.f, 1.f, 3.f);
+    auto* init = vec3<f32>(1_f, 1_f, 3_f);
 
     auto* v = Let("var", ty.vec3<f32>(), init);
 
diff --git a/src/tint/writer/spirv/builder_global_variable_test.cc b/src/tint/writer/spirv/builder_global_variable_test.cc
index 727c573..249c048 100644
--- a/src/tint/writer/spirv/builder_global_variable_test.cc
+++ b/src/tint/writer/spirv/builder_global_variable_test.cc
@@ -17,6 +17,8 @@
 #include "src/tint/writer/spirv/spv_dump.h"
 #include "src/tint/writer/spirv/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::spirv {
 namespace {
 
@@ -38,7 +40,7 @@
 }
 
 TEST_F(BuilderTest, GlobalVar_WithConstructor) {
-    auto* init = vec3<f32>(1.f, 1.f, 3.f);
+    auto* init = vec3<f32>(1_f, 1_f, 3_f);
 
     auto* v = Global("var", ty.vec3<f32>(), ast::StorageClass::kPrivate, init);
 
@@ -60,7 +62,7 @@
 }
 
 TEST_F(BuilderTest, GlobalVar_Const) {
-    auto* init = vec3<f32>(1.f, 1.f, 3.f);
+    auto* init = vec3<f32>(1_f, 1_f, 3_f);
 
     auto* v = GlobalConst("var", ty.vec3<f32>(), init);
 
@@ -80,7 +82,7 @@
 }
 
 TEST_F(BuilderTest, GlobalVar_Complex_Constructor) {
-    auto* init = vec3<f32>(ast::ExpressionList{Expr(1.f), Expr(2.f), Expr(3.f)});
+    auto* init = vec3<f32>(1_f, 2_f, 3_f);
 
     auto* v = GlobalConst("var", ty.vec3<f32>(), init);
 
@@ -99,7 +101,7 @@
 }
 
 TEST_F(BuilderTest, GlobalVar_Complex_ConstructorWithExtract) {
-    auto* init = vec3<f32>(vec2<f32>(1.f, 2.f), 3.f);
+    auto* init = vec3<f32>(vec2<f32>(1_f, 2_f), 3_f);
 
     auto* v = GlobalConst("var", ty.vec3<f32>(), init);
 
@@ -201,7 +203,7 @@
 }
 
 TEST_F(BuilderTest, GlobalVar_Override_Scalar) {
-    auto* v = Override("var", ty.f32(), Expr(2.f),
+    auto* v = Override("var", ty.f32(), Expr(2_f),
                        ast::AttributeList{
                            Id(0),
                        });
diff --git a/src/tint/writer/spirv/builder_ident_expression_test.cc b/src/tint/writer/spirv/builder_ident_expression_test.cc
index 540b5c1..e2e9826 100644
--- a/src/tint/writer/spirv/builder_ident_expression_test.cc
+++ b/src/tint/writer/spirv/builder_ident_expression_test.cc
@@ -23,7 +23,7 @@
 using BuilderTest = TestHelper;
 
 TEST_F(BuilderTest, IdentifierExpression_GlobalConst) {
-    auto* init = vec3<f32>(1.f, 1.f, 3.f);
+    auto* init = vec3<f32>(1_f, 1_f, 3_f);
 
     auto* v = GlobalConst("var", ty.vec3<f32>(), init);
 
@@ -67,7 +67,7 @@
 }
 
 TEST_F(BuilderTest, IdentifierExpression_FunctionConst) {
-    auto* init = vec3<f32>(1.f, 1.f, 3.f);
+    auto* init = vec3<f32>(1_f, 1_f, 3_f);
 
     auto* v = Let("var", ty.vec3<f32>(), init);
 
diff --git a/src/tint/writer/spirv/builder_literal_test.cc b/src/tint/writer/spirv/builder_literal_test.cc
index d8a0311..218db86 100644
--- a/src/tint/writer/spirv/builder_literal_test.cc
+++ b/src/tint/writer/spirv/builder_literal_test.cc
@@ -72,7 +72,7 @@
 }
 
 TEST_F(BuilderTest, Literal_I32) {
-    auto* i = Expr(i32(-23));
+    auto* i = Expr(-23_i);
     WrapInFunction(i);
     spirv::Builder& b = Build();
 
@@ -86,8 +86,8 @@
 }
 
 TEST_F(BuilderTest, Literal_I32_Dedup) {
-    auto* i1 = Expr(i32(-23));
-    auto* i2 = Expr(i32(-23));
+    auto* i1 = Expr(-23_i);
+    auto* i2 = Expr(-23_i);
     WrapInFunction(i1, i2);
 
     spirv::Builder& b = Build();
@@ -133,7 +133,7 @@
 }
 
 TEST_F(BuilderTest, Literal_F32) {
-    auto* i = create<ast::FloatLiteralExpression>(23.245f);
+    auto* i = create<ast::FloatLiteralExpression>(23.245, ast::FloatLiteralExpression::Suffix::kF);
     WrapInFunction(i);
 
     spirv::Builder& b = Build();
@@ -148,8 +148,8 @@
 }
 
 TEST_F(BuilderTest, Literal_F32_Dedup) {
-    auto* i1 = create<ast::FloatLiteralExpression>(23.245f);
-    auto* i2 = create<ast::FloatLiteralExpression>(23.245f);
+    auto* i1 = create<ast::FloatLiteralExpression>(23.245, ast::FloatLiteralExpression::Suffix::kF);
+    auto* i2 = create<ast::FloatLiteralExpression>(23.245, ast::FloatLiteralExpression::Suffix::kF);
     WrapInFunction(i1, i2);
 
     spirv::Builder& b = Build();
diff --git a/src/tint/writer/spirv/builder_return_test.cc b/src/tint/writer/spirv/builder_return_test.cc
index 635db28..0027311 100644
--- a/src/tint/writer/spirv/builder_return_test.cc
+++ b/src/tint/writer/spirv/builder_return_test.cc
@@ -15,6 +15,8 @@
 #include "src/tint/writer/spirv/spv_dump.h"
 #include "src/tint/writer/spirv/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::spirv {
 namespace {
 
@@ -35,7 +37,7 @@
 }
 
 TEST_F(BuilderTest, Return_WithValue) {
-    auto* val = vec3<f32>(1.f, 1.f, 3.f);
+    auto* val = vec3<f32>(1_f, 1_f, 3_f);
 
     auto* ret = Return(val);
     Func("test", {}, ty.vec3<f32>(), {ret}, {});
diff --git a/src/tint/writer/spirv/builder_unary_op_expression_test.cc b/src/tint/writer/spirv/builder_unary_op_expression_test.cc
index c34ae32..fa80828 100644
--- a/src/tint/writer/spirv/builder_unary_op_expression_test.cc
+++ b/src/tint/writer/spirv/builder_unary_op_expression_test.cc
@@ -39,7 +39,7 @@
 }
 
 TEST_F(BuilderTest, UnaryOp_Negation_Float) {
-    auto* expr = create<ast::UnaryOpExpression>(ast::UnaryOp::kNegation, Expr(1.f));
+    auto* expr = create<ast::UnaryOpExpression>(ast::UnaryOp::kNegation, Expr(1_f));
     WrapInFunction(expr);
 
     spirv::Builder& b = Build();
diff --git a/src/tint/writer/wgsl/generator_impl.cc b/src/tint/writer/wgsl/generator_impl.cc
index 588a6e9..3ef6269 100644
--- a/src/tint/writer/wgsl/generator_impl.cc
+++ b/src/tint/writer/wgsl/generator_impl.cc
@@ -262,7 +262,7 @@
             return true;
         },
         [&](const ast::FloatLiteralExpression* l) {  //
-            out << FloatToBitPreservingString(l->value);
+            out << FloatToBitPreservingString(static_cast<float>(l->value));
             return true;
         },
         [&](const ast::IntLiteralExpression* l) {  //
diff --git a/src/tint/writer/wgsl/generator_impl_call_test.cc b/src/tint/writer/wgsl/generator_impl_call_test.cc
index 0736ad8..6a7e077 100644
--- a/src/tint/writer/wgsl/generator_impl_call_test.cc
+++ b/src/tint/writer/wgsl/generator_impl_call_test.cc
@@ -15,13 +15,15 @@
 #include "src/tint/ast/call_statement.h"
 #include "src/tint/writer/wgsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::wgsl {
 namespace {
 
 using WgslGeneratorImplTest = TestHelper;
 
 TEST_F(WgslGeneratorImplTest, EmitExpression_Call_WithoutParams) {
-    Func("my_func", {}, ty.f32(), {Return(1.23f)});
+    Func("my_func", {}, ty.f32(), {Return(1.23_f)});
 
     auto* call = Call("my_func");
     WrapInFunction(call);
@@ -39,7 +41,7 @@
              Param(Sym(), ty.f32()),
              Param(Sym(), ty.f32()),
          },
-         ty.f32(), {Return(1.23f)});
+         ty.f32(), {Return(1.23_f)});
     Global("param1", ty.f32(), ast::StorageClass::kPrivate);
     Global("param2", ty.f32(), ast::StorageClass::kPrivate);
 
diff --git a/src/tint/writer/wgsl/generator_impl_constructor_test.cc b/src/tint/writer/wgsl/generator_impl_constructor_test.cc
index 3fbf3f1..7a147c2 100644
--- a/src/tint/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/tint/writer/wgsl/generator_impl_constructor_test.cc
@@ -34,7 +34,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Int) {
-    WrapInFunction(Expr(i32(-12345)));
+    WrapInFunction(Expr(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -62,7 +62,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Float) {
-    WrapInFunction(Construct<f32>(Expr(-1.2e-5f)));
+    WrapInFunction(Construct<f32>(Expr(-1.2e-5_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -80,7 +80,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Int) {
-    WrapInFunction(Construct<i32>(i32(-12345)));
+    WrapInFunction(Construct<i32>(-12345_i));
 
     GeneratorImpl& gen = Build();
 
@@ -98,7 +98,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Vec) {
-    WrapInFunction(vec3<f32>(1.f, 2.f, 3.f));
+    WrapInFunction(vec3<f32>(1_f, 2_f, 3_f));
 
     GeneratorImpl& gen = Build();
 
@@ -107,7 +107,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Mat) {
-    WrapInFunction(mat2x3<f32>(vec3<f32>(1.f, 2.f, 3.f), vec3<f32>(3.f, 4.f, 5.f)));
+    WrapInFunction(mat2x3<f32>(vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(3_f, 4_f, 5_f)));
 
     GeneratorImpl& gen = Build();
 
@@ -117,8 +117,8 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Array) {
-    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1.0f, 2.0f, 3.0f),
-                             vec3<f32>(4.0f, 5.0f, 6.0f), vec3<f32>(7.0f, 8.0f, 9.0f)));
+    WrapInFunction(Construct(ty.array(ty.vec3<f32>(), 3_u), vec3<f32>(1_f, 2_f, 3_f),
+                             vec3<f32>(4_f, 5_f, 6_f), vec3<f32>(7_f, 8_f, 9_f)));
 
     GeneratorImpl& gen = Build();
 
diff --git a/src/tint/writer/wgsl/generator_impl_function_test.cc b/src/tint/writer/wgsl/generator_impl_function_test.cc
index 79a95d5..da91948 100644
--- a/src/tint/writer/wgsl/generator_impl_function_test.cc
+++ b/src/tint/writer/wgsl/generator_impl_function_test.cc
@@ -123,7 +123,7 @@
 TEST_F(WgslGeneratorImplTest, Emit_Function_EntryPoint_ReturnValue) {
     auto* func = Func("frag_main", ast::VariableList{}, ty.f32(),
                       ast::StatementList{
-                          Return(1.f),
+                          Return(1_f),
                       },
                       ast::AttributeList{
                           Stage(ast::PipelineStage::kFragment),
diff --git a/src/tint/writer/wgsl/generator_impl_literal_test.cc b/src/tint/writer/wgsl/generator_impl_literal_test.cc
index 64d97a4..353bd36 100644
--- a/src/tint/writer/wgsl/generator_impl_literal_test.cc
+++ b/src/tint/writer/wgsl/generator_impl_literal_test.cc
@@ -16,6 +16,8 @@
 
 #include "src/tint/writer/wgsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::wgsl {
 namespace {
 
@@ -23,7 +25,7 @@
 // - 0 sign if sign is 0, 1 otherwise
 // - 'exponent_bits' is placed in the exponent space.
 //   So, the exponent bias must already be included.
-float MakeFloat(int sign, int biased_exponent, int mantissa) {
+f32 MakeFloat(int sign, int biased_exponent, int mantissa) {
     const uint32_t sign_bit = sign ? 0x80000000u : 0u;
     // The binary32 exponent is 8 bits, just below the sign.
     const uint32_t exponent_bits = (biased_exponent & 0xffu) << 23;
@@ -35,11 +37,11 @@
     static_assert(sizeof(result) == sizeof(bits),
                   "expected float and uint32_t to be the same size");
     std::memcpy(&result, &bits, sizeof(bits));
-    return result;
+    return f32(result);
 }
 
 struct FloatData {
-    float value;
+    f32 value;
     std::string expected;
 };
 inline std::ostream& operator<<(std::ostream& out, FloatData data) {
@@ -62,15 +64,15 @@
 
 INSTANTIATE_TEST_SUITE_P(Zero,
                          WgslGenerator_FloatLiteralTest,
-                         ::testing::ValuesIn(std::vector<FloatData>{{0.0f, "0.0"},
+                         ::testing::ValuesIn(std::vector<FloatData>{{0_f, "0.0"},
                                                                     {MakeFloat(0, 0, 0), "0.0"},
                                                                     {MakeFloat(1, 0, 0), "-0.0"}}));
 
 INSTANTIATE_TEST_SUITE_P(Normal,
                          WgslGenerator_FloatLiteralTest,
-                         ::testing::ValuesIn(std::vector<FloatData>{{1.0f, "1.0"},
-                                                                    {-1.0f, "-1.0"},
-                                                                    {101.375, "101.375"}}));
+                         ::testing::ValuesIn(std::vector<FloatData>{{1_f, "1.0"},
+                                                                    {-1_f, "-1.0"},
+                                                                    {101.375_f, "101.375"}}));
 
 INSTANTIATE_TEST_SUITE_P(Subnormal,
                          WgslGenerator_FloatLiteralTest,
diff --git a/src/tint/writer/wgsl/generator_impl_variable_test.cc b/src/tint/writer/wgsl/generator_impl_variable_test.cc
index 8ebe6c5..80f6259 100644
--- a/src/tint/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/tint/writer/wgsl/generator_impl_variable_test.cc
@@ -14,6 +14,8 @@
 
 #include "src/tint/writer/wgsl/test_helper.h"
 
+using namespace tint::number_suffixes;  // NOLINT
+
 namespace tint::writer::wgsl {
 namespace {
 
@@ -99,7 +101,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitVariable_Constructor) {
-    auto* v = Global("a", ty.f32(), ast::StorageClass::kPrivate, Expr(1.0f));
+    auto* v = Global("a", ty.f32(), ast::StorageClass::kPrivate, Expr(1_f));
 
     GeneratorImpl& gen = Build();
 
@@ -109,7 +111,7 @@
 }
 
 TEST_F(WgslGeneratorImplTest, EmitVariable_Const) {
-    auto* v = Let("a", ty.f32(), Expr(1.0f));
+    auto* v = Let("a", ty.f32(), Expr(1_f));
     WrapInFunction(Decl(v));
 
     GeneratorImpl& gen = Build();