wgsl: Fixes for new validation failures

Values of array and matrix can now only be indexed by a constant value.
Dynamic indexing requires the value to be held in memory.

See: https://github.com/gpuweb/gpuweb/issues/1782

Bug: tint:867
Change-Id: I2b9ad6e40fc8121e7aca3a71c190639b39b0b862
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/54652
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Auto-Submit: Ben Clayton <bclayton@google.com>
diff --git a/src/dawn_native/CopyTextureForBrowserHelper.cpp b/src/dawn_native/CopyTextureForBrowserHelper.cpp
index 6f45101..5094f28 100644
--- a/src/dawn_native/CopyTextureForBrowserHelper.cpp
+++ b/src/dawn_native/CopyTextureForBrowserHelper.cpp
@@ -40,11 +40,6 @@
             };
             [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
 
-            let texcoord : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
-                vec2<f32>(-0.5, 0.0),
-                vec2<f32>( 1.5, 0.0),
-                vec2<f32>( 0.5, 2.0));
-
             struct VertexOutputs {
                 [[location(0)]] texcoords : vec2<f32>;
                 [[builtin(position)]] position : vec4<f32>;
@@ -53,6 +48,11 @@
             [[stage(vertex)]] fn main(
                 [[builtin(vertex_index)]] VertexIndex : u32
             ) -> VertexOutputs {
+                var texcoord : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                    vec2<f32>(-0.5, 0.0),
+                    vec2<f32>( 1.5, 0.0),
+                    vec2<f32>( 0.5, 2.0));
+
                 var output : VertexOutputs;
                 output.position = vec4<f32>((texcoord[VertexIndex] * 2.0 - vec2<f32>(1.0, 1.0)), 0.0, 1.0);
 
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 530b464..df6a223 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -1197,7 +1197,7 @@
     pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-            let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+            var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, -1.0),
                 vec2<f32>( 3.0, -1.0),
                 vec2<f32>(-1.0,  3.0));
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index 72fa494..8d303f4 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -48,7 +48,7 @@
         return utils::CreateShaderModule(device, R"(
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-             let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+             var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, 1.0),
                 vec2<f32>( 1.0, 1.0),
                 vec2<f32>(-1.0, -1.0));
@@ -165,7 +165,7 @@
 
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-            let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+            var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, 1.0),
                 vec2<f32>( 1.0, 1.0),
                 vec2<f32>(-1.0, -1.0));
@@ -242,7 +242,7 @@
 
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-            let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+            var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, 1.0),
                 vec2<f32>( 1.0, 1.0),
                 vec2<f32>(-1.0, -1.0));
@@ -353,7 +353,7 @@
 
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-            let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+            var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, 1.0),
                 vec2<f32>( 1.0, 1.0),
                 vec2<f32>(-1.0, -1.0));
@@ -939,7 +939,7 @@
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-            let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+            var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, 1.0),
                 vec2<f32>( 1.0, 1.0),
                 vec2<f32>(-1.0, -1.0));
@@ -1091,7 +1091,7 @@
     pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]]
         fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-            let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+            var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                 vec2<f32>(-1.0, 1.0),
                 vec2<f32>( 1.0, 1.0),
                 vec2<f32>(-1.0, -1.0));
diff --git a/src/tests/end2end/ClipSpaceTests.cpp b/src/tests/end2end/ClipSpaceTests.cpp
index 52cd95c..46160a7 100644
--- a/src/tests/end2end/ClipSpaceTests.cpp
+++ b/src/tests/end2end/ClipSpaceTests.cpp
@@ -26,16 +26,15 @@
         // 1. The depth value of the top-left one is >= 0.5
         // 2. The depth value of the bottom-right one is <= 0.5
         pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
-            let pos : array<vec3<f32>, 6> = array<vec3<f32>, 6>(
-                vec3<f32>(-1.0,  1.0, 1.0),
-                vec3<f32>(-1.0, -1.0, 0.5),
-                vec3<f32>( 1.0,  1.0, 0.5),
-                vec3<f32>( 1.0,  1.0, 0.5),
-                vec3<f32>(-1.0, -1.0, 0.5),
-                vec3<f32>( 1.0, -1.0, 0.0));
-
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+                var pos : array<vec3<f32>, 6> = array<vec3<f32>, 6>(
+                    vec3<f32>(-1.0,  1.0, 1.0),
+                    vec3<f32>(-1.0, -1.0, 0.5),
+                    vec3<f32>( 1.0,  1.0, 0.5),
+                    vec3<f32>( 1.0,  1.0, 0.5),
+                    vec3<f32>(-1.0, -1.0, 0.5),
+                    vec3<f32>( 1.0, -1.0, 0.0));
                 return vec4<f32>(pos[VertexIndex], 1.0);
             })");
 
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 04881a3..f254d7b 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -37,7 +37,7 @@
         vsModule = utils::CreateShaderModule(device, R"(
                 [[stage(vertex)]]
                 fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                    let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                    var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                         vec2<f32>(-1.0, -1.0),
                         vec2<f32>(3.0, -1.0),
                         vec2<f32>(-1.0, 3.0));
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 99fde59..9f711be 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -147,7 +147,7 @@
 
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOut {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-3.0,  1.0),
                     vec2<f32>( 3.0,  1.0),
                     vec2<f32>( 0.0, -2.0)
diff --git a/src/tests/end2end/CullingTests.cpp b/src/tests/end2end/CullingTests.cpp
index 7700e18..eb21223 100644
--- a/src/tests/end2end/CullingTests.cpp
+++ b/src/tests/end2end/CullingTests.cpp
@@ -26,16 +26,15 @@
         // 1. The top-left one is counterclockwise (CCW)
         // 2. The bottom-right one is clockwise (CW)
         pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
-            let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
-                vec2<f32>(-1.0,  1.0),
-                vec2<f32>(-1.0,  0.0),
-                vec2<f32>( 0.0,  1.0),
-                vec2<f32>( 0.0, -1.0),
-                vec2<f32>( 1.0,  0.0),
-                vec2<f32>( 1.0, -1.0));
-
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    vec2<f32>(-1.0,  1.0),
+                    vec2<f32>(-1.0,  0.0),
+                    vec2<f32>( 0.0,  1.0),
+                    vec2<f32>( 0.0, -1.0),
+                    vec2<f32>( 1.0,  0.0),
+                    vec2<f32>( 1.0, -1.0));
                 return vec4<f32>(pos[VertexIndex], 0.0, 1.0);
             })");
 
diff --git a/src/tests/end2end/D3D12VideoViewsTests.cpp b/src/tests/end2end/D3D12VideoViewsTests.cpp
index 00a9de3..36dc66e 100644
--- a/src/tests/end2end/D3D12VideoViewsTests.cpp
+++ b/src/tests/end2end/D3D12VideoViewsTests.cpp
@@ -238,7 +238,7 @@
 
                 [[stage(vertex)]]
                 fn main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOut {
-                    let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                         vec2<f32>(-1.0, 1.0),
                         vec2<f32>(-1.0, -1.0),
                         vec2<f32>(1.0, -1.0),
@@ -463,4 +463,4 @@
                           kYUVImageDataHeightInTexels - 1);  // bottom left
 }
 
-DAWN_INSTANTIATE_TEST(D3D12VideoViewsTests, D3D12Backend());
\ No newline at end of file
+DAWN_INSTANTIATE_TEST(D3D12VideoViewsTests, D3D12Backend());
diff --git a/src/tests/end2end/DepthBiasTests.cpp b/src/tests/end2end/DepthBiasTests.cpp
index b18f181..c185d2a 100644
--- a/src/tests/end2end/DepthBiasTests.cpp
+++ b/src/tests/end2end/DepthBiasTests.cpp
@@ -38,7 +38,7 @@
                 vertexSource = R"(
     [[stage(vertex)]]
     fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-        let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+        var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
             vec2<f32>(-1.0, -1.0),
             vec2<f32>( 1.0, -1.0),
             vec2<f32>(-1.0,  1.0),
@@ -54,7 +54,7 @@
                 vertexSource = R"(
     [[stage(vertex)]]
     fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-        let pos : array<vec3<f32>, 6> = array<vec3<f32>, 6>(
+        var pos : array<vec3<f32>, 6> = array<vec3<f32>, 6>(
             vec3<f32>(-1.0, -1.0, 0.0),
             vec3<f32>( 1.0, -1.0, 0.0),
             vec3<f32>(-1.0,  1.0, 0.5),
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index 0cc4a72..5d0ae0e 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -31,7 +31,7 @@
         mVertexModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                     vec2<f32>(-1.0, -1.0),
                     vec2<f32>( 0.0, -1.0),
                     vec2<f32>(-1.0,  0.0),
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index 6e79a76..cd9b586 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -64,7 +64,7 @@
 
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                         vec2<f32>(-1.0,  1.0),
                         vec2<f32>(-1.0, -1.0),
                         vec2<f32>( 1.0, -1.0), // front-facing
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index f6bfa3b..3c2c50b 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -96,7 +96,7 @@
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0, 0.0),
                     vec2<f32>(-1.0, 1.0),
                     vec2<f32>( 0.0, 1.0));
diff --git a/src/tests/end2end/ExternalTextureTests.cpp b/src/tests/end2end/ExternalTextureTests.cpp
index 99fa9bf..da16777 100644
--- a/src/tests/end2end/ExternalTextureTests.cpp
+++ b/src/tests/end2end/ExternalTextureTests.cpp
@@ -64,13 +64,11 @@
 TEST_P(ExternalTextureTests, SampleExternalTexture) {
     wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
         [[stage(vertex)]] fn main([[builtin(vertex_idx)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-
-            let positions : array<vec4<f32>, 3> = array<vec4<f32>, 3>(
+            var positions : array<vec4<f32>, 3> = array<vec4<f32>, 3>(
                 vec4<f32>(-1.0, 1.0, 0.0, 1.0),
                 vec4<f32>(-1.0, -1.0, 0.0, 1.0),
                 vec4<f32>(1.0, 1.0, 0.0, 1.0)
             );
-
             return positions[VertexIndex];
         })");
 
@@ -154,4 +152,4 @@
                       MetalBackend(),
                       OpenGLBackend(),
                       OpenGLESBackend(),
-                      VulkanBackend());
\ No newline at end of file
+                      VulkanBackend());
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 7145da7..6783cd3 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -255,7 +255,7 @@
 
                 [[stage(vertex)]]
                 fn main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOut {
-                    let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                         vec2<f32>(-2.0, -2.0),
                         vec2<f32>(-2.0,  2.0),
                         vec2<f32>( 2.0, -2.0),
@@ -263,7 +263,7 @@
                         vec2<f32>( 2.0, -2.0),
                         vec2<f32>( 2.0,  2.0));
 
-                    let texCoord : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    var texCoord : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                         vec2<f32>(0.0, 0.0),
                         vec2<f32>(0.0, 1.0),
                         vec2<f32>(1.0, 0.0),
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index 963e370..5c1ba17 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -225,7 +225,7 @@
         const char* vs = R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>( 1.0, -1.0)
@@ -237,7 +237,7 @@
         const char* vsFlipped = R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>(-1.0, -1.0)
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index 0ab39e3..6c7f36f 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -83,7 +83,7 @@
         vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>(-1.0, -1.0),
                     vec2<f32>( 1.0, -1.0));
diff --git a/src/tests/end2end/RenderPassLoadOpTests.cpp b/src/tests/end2end/RenderPassLoadOpTests.cpp
index f4ad26b..a44fc19 100644
--- a/src/tests/end2end/RenderPassLoadOpTests.cpp
+++ b/src/tests/end2end/RenderPassLoadOpTests.cpp
@@ -79,7 +79,7 @@
         const char* vsSource = R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                     vec2<f32>( 0.0, -1.0),
                     vec2<f32>( 1.0, -1.0),
                     vec2<f32>( 0.0,  1.0),
diff --git a/src/tests/end2end/RenderPassTests.cpp b/src/tests/end2end/RenderPassTests.cpp
index 12d4fe5..b9a30b5 100644
--- a/src/tests/end2end/RenderPassTests.cpp
+++ b/src/tests/end2end/RenderPassTests.cpp
@@ -29,7 +29,7 @@
         mVSModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>( 1.0, -1.0),
                     vec2<f32>(-1.0, -1.0));
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index 77bf89d..f020c6a 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -57,7 +57,7 @@
         auto vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                     vec2<f32>(-2.0, -2.0),
                     vec2<f32>(-2.0,  2.0),
                     vec2<f32>( 2.0, -2.0),
diff --git a/src/tests/end2end/ScissorTests.cpp b/src/tests/end2end/ScissorTests.cpp
index 3edf298..5b24885 100644
--- a/src/tests/end2end/ScissorTests.cpp
+++ b/src/tests/end2end/ScissorTests.cpp
@@ -21,16 +21,15 @@
   protected:
     wgpu::RenderPipeline CreateQuadPipeline(wgpu::TextureFormat format) {
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
-            let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
-                vec2<f32>(-1.0, -1.0),
-                vec2<f32>(-1.0,  1.0),
-                vec2<f32>( 1.0, -1.0),
-                vec2<f32>( 1.0,  1.0),
-                vec2<f32>(-1.0,  1.0),
-                vec2<f32>( 1.0, -1.0));
-
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    vec2<f32>(-1.0, -1.0),
+                    vec2<f32>(-1.0,  1.0),
+                    vec2<f32>( 1.0, -1.0),
+                    vec2<f32>( 1.0,  1.0),
+                    vec2<f32>(-1.0,  1.0),
+                    vec2<f32>( 1.0, -1.0));
                 return vec4<f32>(pos[VertexIndex], 0.5, 1.0);
             })");
 
diff --git a/src/tests/end2end/ShaderTests.cpp b/src/tests/end2end/ShaderTests.cpp
index 75a3eb8..10555bb 100644
--- a/src/tests/end2end/ShaderTests.cpp
+++ b/src/tests/end2end/ShaderTests.cpp
@@ -101,7 +101,7 @@
     std::string vertexShader = R"(
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-    let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+    var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
         vec2<f32>(-1.0,  1.0),
         vec2<f32>( 1.0,  1.0),
         vec2<f32>( 0.0, -1.0));
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 57d125c..75f8d29 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -145,7 +145,7 @@
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-3.0, -1.0),
                     vec2<f32>( 3.0, -1.0),
                     vec2<f32>( 0.0,  2.0));
diff --git a/src/tests/end2end/TextureSubresourceTests.cpp b/src/tests/end2end/TextureSubresourceTests.cpp
index 6eee39f..a168eaa 100644
--- a/src/tests/end2end/TextureSubresourceTests.cpp
+++ b/src/tests/end2end/TextureSubresourceTests.cpp
@@ -52,7 +52,7 @@
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>(-1.0, -1.0),
                     vec2<f32>( 1.0, -1.0));
@@ -89,7 +89,7 @@
         wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                     vec2<f32>(-1.0, -1.0),
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>(-1.0,  1.0),
diff --git a/src/tests/end2end/TextureViewTests.cpp b/src/tests/end2end/TextureViewTests.cpp
index bebaf4d..e5f2faf 100644
--- a/src/tests/end2end/TextureViewTests.cpp
+++ b/src/tests/end2end/TextureViewTests.cpp
@@ -69,14 +69,14 @@
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOut {
                 var output : VertexOut;
-                let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                                             vec2<f32>(-2., -2.),
                                             vec2<f32>(-2.,  2.),
                                             vec2<f32>( 2., -2.),
                                             vec2<f32>(-2.,  2.),
                                             vec2<f32>( 2., -2.),
                                             vec2<f32>( 2.,  2.));
-                let texCoord : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                var texCoord : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
                                                  vec2<f32>(0., 0.),
                                                  vec2<f32>(0., 1.),
                                                  vec2<f32>(1., 0.),
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index 8438298..3fba2a2 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -83,17 +83,16 @@
     }
     wgpu::ShaderModule CreateBasicVertexShaderForTest(float depth = 0.f) {
         std::string source = R"(
-            let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
-                vec2<f32>(-1.0, -1.0),
-                vec2<f32>(-1.0,  1.0),
-                vec2<f32>( 1.0, -1.0),
-                vec2<f32>( 1.0,  1.0),
-                vec2<f32>(-1.0,  1.0),
-                vec2<f32>( 1.0, -1.0)
-            );
-
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    vec2<f32>(-1.0, -1.0),
+                    vec2<f32>(-1.0,  1.0),
+                    vec2<f32>( 1.0, -1.0),
+                    vec2<f32>( 1.0,  1.0),
+                    vec2<f32>(-1.0,  1.0),
+                    vec2<f32>( 1.0, -1.0)
+                );
                 return vec4<f32>(pos[VertexIndex], )" +
                              std::to_string(depth) + R"(, 1.0);
             })";
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index f885c57..909e1cb 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -266,7 +266,7 @@
 
             [[stage(vertex)]]
             fn main(input : VertexIn) -> VertexOut {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0, -1.0),
                     vec2<f32>( 2.0,  0.0),
                     vec2<f32>( 0.0,  2.0));
diff --git a/src/tests/end2end/VertexStateTests.cpp b/src/tests/end2end/VertexStateTests.cpp
index 15c3f55..218c149 100644
--- a/src/tests/end2end/VertexStateTests.cpp
+++ b/src/tests/end2end/VertexStateTests.cpp
@@ -84,7 +84,7 @@
                 [[builtin(vertex_index)]] VertexIndex : u32;
                 [[builtin(instance_index)]] InstanceIndex : u32;
             };
-            
+
             struct VertexOut {
                 [[location(0)]] color : vec4<f32>;
                 [[builtin(position)]] position : vec4<f32>;
@@ -96,7 +96,7 @@
 
         // Hard code the triangle in the shader so that we don't have to add a vertex input for it.
         // Also this places the triangle in the grid based on its VertexID and InstanceID
-        vs << "    let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(\n"
+        vs << "    var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(\n"
               "         vec2<f32>(0.5, 1.0), vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0));\n";
         vs << "    var offset : vec2<f32> = vec2<f32>(f32(input.VertexIndex / 3u), "
               "f32(input.InstanceIndex));\n";
diff --git a/src/tests/end2end/ViewportTests.cpp b/src/tests/end2end/ViewportTests.cpp
index 4ac203a..56f94df 100644
--- a/src/tests/end2end/ViewportTests.cpp
+++ b/src/tests/end2end/ViewportTests.cpp
@@ -23,16 +23,15 @@
         DawnTest::SetUp();
 
         mQuadVS = utils::CreateShaderModule(device, R"(
-            let pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
-                vec2<f32>(-1.0,  1.0),
-                vec2<f32>(-1.0, -1.0),
-                vec2<f32>( 1.0,  1.0),
-                vec2<f32>( 1.0,  1.0),
-                vec2<f32>(-1.0, -1.0),
-                vec2<f32>( 1.0, -1.0));
-
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+                var pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
+                    vec2<f32>(-1.0,  1.0),
+                    vec2<f32>(-1.0, -1.0),
+                    vec2<f32>( 1.0,  1.0),
+                    vec2<f32>( 1.0,  1.0),
+                    vec2<f32>(-1.0, -1.0),
+                    vec2<f32>( 1.0, -1.0));
                 return vec4<f32>(pos[VertexIndex], 0.0, 1.0);
             })");
 
@@ -93,13 +92,12 @@
         // Create a pipeline drawing 3 points at depth 1.0, 0.5 and 0.0.
         utils::ComboRenderPipelineDescriptor pipelineDesc;
         pipelineDesc.vertex.module = utils::CreateShaderModule(device, R"(
-            let points : array<vec3<f32>, 3> = array<vec3<f32>, 3>(
-                vec3<f32>(-0.9, 0.0, 1.0),
-                vec3<f32>( 0.0, 0.0, 0.5),
-                vec3<f32>( 0.9, 0.0, 0.0));
-
             [[stage(vertex)]]
             fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+                var points : array<vec3<f32>, 3> = array<vec3<f32>, 3>(
+                    vec3<f32>(-0.9, 0.0, 1.0),
+                    vec3<f32>( 0.0, 0.0, 0.5),
+                    vec3<f32>( 0.9, 0.0, 0.0));
                 return vec4<f32>(points[VertexIndex], 1.0);
             })");
         pipelineDesc.cFragment.module = mQuadFS;
diff --git a/src/tests/white_box/D3D12DescriptorHeapTests.cpp b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
index 7df03f1..5bfbb6e 100644
--- a/src/tests/white_box/D3D12DescriptorHeapTests.cpp
+++ b/src/tests/white_box/D3D12DescriptorHeapTests.cpp
@@ -44,7 +44,7 @@
             [[stage(vertex)]] fn main(
                 [[builtin(vertex_index)]] VertexIndex : u32
             ) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>(-1.0, -1.0)
@@ -785,7 +785,7 @@
             [[stage(vertex)]] fn main(
                 [[builtin(vertex_index)]] VertexIndex : u32
             ) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>(-1.0, -1.0)
diff --git a/src/tests/white_box/D3D12ResidencyTests.cpp b/src/tests/white_box/D3D12ResidencyTests.cpp
index d066720..23ce035 100644
--- a/src/tests/white_box/D3D12ResidencyTests.cpp
+++ b/src/tests/white_box/D3D12ResidencyTests.cpp
@@ -342,7 +342,7 @@
             [[stage(vertex)]] fn main(
                 [[builtin(vertex_index)]] VertexIndex : u32
             ) -> [[builtin(position)]] vec4<f32> {
-                let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
+                var pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
                     vec2<f32>(-1.0,  1.0),
                     vec2<f32>( 1.0,  1.0),
                     vec2<f32>(-1.0, -1.0)