Update Dawn tests to use group instead of set.

This Cl updates the WGSL used by Dawn to use the new `group` decoration
instead of the deprecated `set` decoration.

Change-Id: I145aaff7721dfafff986ddc429c9cdc9389c2110
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38141
Auto-Submit: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/examples/ComputeBoids.cpp b/examples/ComputeBoids.cpp
index 7bf1062..a90d9e3 100644
--- a/examples/ComputeBoids.cpp
+++ b/examples/ComputeBoids.cpp
@@ -167,9 +167,9 @@
         [[block]] struct Particles {
             [[offset(0)]] particles : [[stride(16)]] array<Particle>;
         };
-        [[binding(0), set(0)]] var<uniform> params : SimParams;
-        [[binding(1), set(0)]] var<storage_buffer> particlesA : [[access(read)]] Particles;
-        [[binding(2), set(0)]] var<storage_buffer> particlesB : [[access(read_write)]] Particles;
+        [[binding(0), group(0)]] var<uniform> params : SimParams;
+        [[binding(1), group(0)]] var<storage_buffer> particlesA : [[access(read)]] Particles;
+        [[binding(2), group(0)]] var<storage_buffer> particlesB : [[access(read_write)]] Particles;
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
         // https://github.com/austinEng/Project6-Vulkan-Flocking/blob/master/data/shaders/computeparticles/particle.comp
diff --git a/examples/CppHelloTriangle.cpp b/examples/CppHelloTriangle.cpp
index 08fd4c5..fdaa221 100644
--- a/examples/CppHelloTriangle.cpp
+++ b/examples/CppHelloTriangle.cpp
@@ -105,8 +105,8 @@
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
         [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
-        [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler;
-        [[set(0), binding(1)]] var<uniform_constant> myTexture : texture_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler;
+        [[group(0), binding(1)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
         [[location(0)]] var<out> FragColor : vec4<f32>;
         [[stage(fragment)]] fn main() -> void {
diff --git a/examples/CubeReflection.cpp b/examples/CubeReflection.cpp
index 060bd30..eab5071 100644
--- a/examples/CubeReflection.cpp
+++ b/examples/CubeReflection.cpp
@@ -106,12 +106,12 @@
             [[offset(0)]] view : mat4x4<f32>;
             [[offset(64)]] proj : mat4x4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> camera : Camera;
+        [[group(0), binding(0)]] var<uniform> camera : Camera;
 
         [[block]] struct Model {
             [[offset(0)]] matrix : mat4x4<f32>;
         };
-        [[set(0), binding(1)]] var<uniform> model : Model;
+        [[group(0), binding(1)]] var<uniform> model : Model;
 
         [[location(0)]] var<in> pos : vec3<f32>;
         [[location(1)]] var<in> col : vec3<f32>;
diff --git a/src/dawn_native/CopyTextureForBrowserHelper.cpp b/src/dawn_native/CopyTextureForBrowserHelper.cpp
index b8bc2a4..51b36ed 100644
--- a/src/dawn_native/CopyTextureForBrowserHelper.cpp
+++ b/src/dawn_native/CopyTextureForBrowserHelper.cpp
@@ -45,7 +45,7 @@
             [[location(0)]] var<out> v_texcoord: vec2<f32>;
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
-            [[binding(0), set(0)]] var<uniform> uniforms : Uniforms;
+            [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
             [[stage(vertex)]] fn main() -> void {
                 Position = vec4<f32>((texcoord[VertexIndex] * 2.0 - vec2<f32>(1.0, 1.0)), 0.0, 1.0);
 
@@ -57,8 +57,8 @@
         )";
 
         static const char sPassthrough2D4ChannelFrag[] = R"(
-            [[binding(1), set(0)]] var<uniform_constant> mySampler: sampler;
-            [[binding(2), set(0)]] var<uniform_constant> myTexture: texture_2d<f32>;
+            [[binding(1), group(0)]] var<uniform_constant> mySampler: sampler;
+            [[binding(2), group(0)]] var<uniform_constant> myTexture: texture_2d<f32>;
             [[location(0)]] var<in> v_texcoord : vec2<f32>;
             [[location(0)]] var<out> rgbaColor : vec4<f32>;
             [[stage(fragment)]] fn main() -> void {
diff --git a/src/dawn_native/QueryHelper.cpp b/src/dawn_native/QueryHelper.cpp
index 43b8260..e02272f 100644
--- a/src/dawn_native/QueryHelper.cpp
+++ b/src/dawn_native/QueryHelper.cpp
@@ -52,11 +52,11 @@
                 [[offset(8)]]  period : f32;
             };
 
-            [[set(0), binding(0)]]
+            [[group(0), binding(0)]]
                 var<storage_buffer> timestamps : [[access(read_write)]] TimestampArr;
-            [[set(0), binding(1)]]
+            [[group(0), binding(1)]]
                 var<storage_buffer> availability : [[access(read)]] AvailabilityArr;
-            [[set(0), binding(2)]] var<uniform> params : TimestampParams;
+            [[group(0), binding(2)]] var<uniform> params : TimestampParams;
 
             [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
diff --git a/src/tests/end2end/BindGroupTests.cpp b/src/tests/end2end/BindGroupTests.cpp
index 8597924..6f2c51f 100644
--- a/src/tests/end2end/BindGroupTests.cpp
+++ b/src/tests/end2end/BindGroupTests.cpp
@@ -72,11 +72,11 @@
 
             switch (bindingTypes[i]) {
                 case wgpu::BufferBindingType::Uniform:
-                    fs << "\n[[set(" << i << "), binding(0)]] var<uniform> buffer" << i
+                    fs << "\n[[group(" << i << "), binding(0)]] var<uniform> buffer" << i
                        << " : Buffer" << i << ";";
                     break;
                 case wgpu::BufferBindingType::Storage:
-                    fs << "\n[[set(" << i << "), binding(0)]] var<storage_buffer> buffer" << i
+                    fs << "\n[[group(" << i << "), binding(0)]] var<storage_buffer> buffer" << i
                        << " : [[access(read)]] Buffer" << i << ";";
                     break;
                 default:
@@ -123,7 +123,7 @@
         [[block]] struct Contents {
             [[offset(0)]] f : f32;
         };
-        [[set(0), binding(0)]] var <uniform> contents: Contents;
+        [[group(0), binding(0)]] var <uniform> contents: Contents;
 
         [[stage(compute)]] fn main() -> void {
         })");
@@ -162,7 +162,7 @@
             [[offset(0)]] transform : vec4<f32>;
         };
 
-        [[set(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
+        [[group(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
 
         [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
@@ -183,7 +183,7 @@
         [[block]] struct FragmentUniformBuffer {
             [[offset(0)]] color : vec4<f32>;
         };
-        [[set(0), binding(1)]] var <uniform> fragmentUbo : FragmentUniformBuffer;
+        [[group(0), binding(1)]] var <uniform> fragmentUbo : FragmentUniformBuffer;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
 
@@ -249,7 +249,7 @@
         [[block]] struct VertexUniformBuffer {
             [[offset(0)]] transform : vec4<f32>;
         };
-        [[set(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
+        [[group(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
 
         [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
@@ -267,8 +267,8 @@
         })");
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(1)]] var <uniform_constant> samp : sampler;
-        [[set(0), binding(2)]] var <uniform_constant> tex : texture_2d<f32>;
+        [[group(0), binding(1)]] var <uniform_constant> samp : sampler;
+        [[group(0), binding(2)]] var <uniform_constant> tex : texture_2d<f32>;
         [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
@@ -371,8 +371,8 @@
         };
 
         // TODO(crbug.com/tint/386): Use the same struct definition.
-        [[set(0), binding(0)]] var <uniform> vertexUbo1 : VertexUniformBuffer1;
-        [[set(1), binding(0)]] var <uniform> vertexUbo2 : VertexUniformBuffer2;
+        [[group(0), binding(0)]] var <uniform> vertexUbo1 : VertexUniformBuffer1;
+        [[group(1), binding(0)]] var <uniform> vertexUbo2 : VertexUniformBuffer2;
 
         [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
         [[builtin(position)]] var<out> Position : vec4<f32>;
@@ -400,8 +400,8 @@
         };
 
         // TODO(crbug.com/tint/386): Use the same struct definition.
-        [[set(0), binding(1)]] var <uniform> fragmentUbo1 : FragmentUniformBuffer1;
-        [[set(1), binding(1)]] var <uniform> fragmentUbo2 : FragmentUniformBuffer2;
+        [[group(0), binding(1)]] var <uniform> fragmentUbo1 : FragmentUniformBuffer1;
+        [[group(1), binding(1)]] var <uniform> fragmentUbo2 : FragmentUniformBuffer2;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
 
@@ -863,10 +863,10 @@
             [[offset(0)]] value : vec3<u32>;
         };
 
-        [[set(0), binding(2)]] var<uniform> buffer2 : Buffer2;
-        [[set(0), binding(3)]] var<storage_buffer> buffer3 : [[access(read)]] Buffer3;
-        [[set(0), binding(0)]] var<storage_buffer> buffer0 : [[access(read)]] Buffer0;
-        [[set(0), binding(4)]] var<storage_buffer> outputBuffer : [[access(read_write)]] OutputBuffer;
+        [[group(0), binding(2)]] var<uniform> buffer2 : Buffer2;
+        [[group(0), binding(3)]] var<storage_buffer> buffer3 : [[access(read)]] Buffer3;
+        [[group(0), binding(0)]] var<storage_buffer> buffer0 : [[access(read)]] Buffer0;
+        [[group(0), binding(4)]] var<storage_buffer> outputBuffer : [[access(read_write)]] OutputBuffer;
 
         [[stage(compute)]] fn main() -> void {
             outputBuffer.value = vec3<u32>(buffer0.value, buffer2.value, buffer3.value);
@@ -988,9 +988,9 @@
         };
 
         // TODO(crbug.com/tint/386): Use the same struct definition.
-        [[set(0), binding(953)]] var <uniform> ubo1 : Ubo1;
-        [[set(0), binding(47)]] var <uniform> ubo2 : Ubo2;
-        [[set(0), binding(111)]] var <uniform> ubo3 : Ubo3;
+        [[group(0), binding(953)]] var <uniform> ubo1 : Ubo1;
+        [[group(0), binding(47)]] var <uniform> ubo2 : Ubo2;
+        [[group(0), binding(111)]] var <uniform> ubo3 : Ubo3;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
 
@@ -1133,7 +1133,7 @@
         [[block]] struct Buffer0 {
             [[offset(0)]] color : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<storage_buffer> buffer0 : [[access(read)]] Buffer0;
+        [[group(0), binding(0)]] var<storage_buffer> buffer0 : [[access(read)]] Buffer0;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
         [[stage(fragment)]] fn main() -> void {
@@ -1216,13 +1216,13 @@
             wgpu::TextureFormat::R8Unorm, expectedValue, wgpu::TextureUsage::Sampled);
         bgEntries.push_back({binding, nullptr, 0, 0, nullptr, texture.CreateView()});
 
-        interface << "[[set(0), binding(" << binding++ << ")]] "
+        interface << "[[group(0), binding(" << binding++ << ")]] "
                   << "var<uniform_constant> tex" << i << " : texture_2d<f32>;\n";
 
         wgpu::SamplerDescriptor samplerDesc = {};
         bgEntries.push_back({binding, nullptr, 0, 0, device.CreateSampler(&samplerDesc), nullptr});
 
-        interface << "[[set(0), binding(" << binding++ << ")]]"
+        interface << "[[group(0), binding(" << binding++ << ")]]"
                   << "var<uniform_constant> samp" << i << " : sampler;\n";
 
         body << "if (abs(textureSampleLevel(tex" << i << ", samp" << i
@@ -1236,7 +1236,7 @@
             wgpu::TextureFormat::R32Uint, expectedValue, wgpu::TextureUsage::Storage);
         bgEntries.push_back({binding, nullptr, 0, 0, nullptr, texture.CreateView()});
 
-        interface << "[[set(0), binding(" << binding++ << ")]] "
+        interface << "[[group(0), binding(" << binding++ << ")]] "
                   << "var<uniform_constant> image" << i
                   << " : [[access(read)]] texture_storage_2d<r32uint>;\n";
 
@@ -1255,7 +1255,7 @@
                 [[offset(0)]] value : u32;
             };
         )";
-        interface << "[[set(0), binding(" << binding++ << ")]] "
+        interface << "[[group(0), binding(" << binding++ << ")]] "
                   << "var<uniform> ubuf" << i << " : UniformBuffer" << i << ";\n";
 
         body << "if (ubuf" << i << ".value != " << expectedValue++ << "u) {\n";
@@ -1272,7 +1272,7 @@
                 [[offset(0)]] value : u32;
             };
         )";
-        interface << "[[set(0), binding(" << binding++ << ")]] "
+        interface << "[[group(0), binding(" << binding++ << ")]] "
                   << "var<storage_buffer> sbuf" << i << " : [[access(read)]] ReadOnlyStorageBuffer"
                   << i << ";\n";
 
@@ -1289,7 +1289,7 @@
             [[offset(0)]] value : u32;
         };
     )";
-    interface << "[[set(0), binding(" << binding++ << ")]] "
+    interface << "[[group(0), binding(" << binding++ << ")]] "
               << "var<storage_buffer> result : [[access(read_write)]] ReadWriteStorageBuffer;\n";
 
     body << "result.value = 1u;\n";
diff --git a/src/tests/end2end/ColorStateTests.cpp b/src/tests/end2end/ColorStateTests.cpp
index 973a923..79747ee 100644
--- a/src/tests/end2end/ColorStateTests.cpp
+++ b/src/tests/end2end/ColorStateTests.cpp
@@ -60,7 +60,7 @@
                     [[offset(0)]] color : vec4<f32>;
                 };
 
-                [[set(0), binding(0)]] var<uniform> myUbo : MyBlock;
+                [[group(0), binding(0)]] var<uniform> myUbo : MyBlock;
 
                 [[location(0)]] var<out> fragColor : vec4<f32>;
 
@@ -777,7 +777,7 @@
             [[offset(48)]] color3 : vec4<f32>;
         };
 
-        [[set(0), binding(0)]] var<uniform> myUbo : MyBlock;
+        [[group(0), binding(0)]] var<uniform> myUbo : MyBlock;
 
         [[location(0)]] var<out> fragColor0 : vec4<f32>;
         [[location(1)]] var<out> fragColor1 : vec4<f32>;
@@ -884,7 +884,7 @@
             [[offset(0)]] color : vec4<f32>;
         };
 
-        [[set(0), binding(0)]] var<uniform> myUbo : MyBlock;
+        [[group(0), binding(0)]] var<uniform> myUbo : MyBlock;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
 
@@ -1007,7 +1007,7 @@
             [[offset(0)]] color : vec4<f32>;
         };
 
-        [[set(0), binding(0)]] var<uniform> myUbo : MyBlock;
+        [[group(0), binding(0)]] var<uniform> myUbo : MyBlock;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
 
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 4453505..f953839 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -156,8 +156,8 @@
                 return;
             })");
         wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
-            [[set(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
+            [[group(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
 
             [[location(0)]] var<in> texCoord : vec2<f32>;
             [[location(0)]] var<out> fragColor : vec4<f32>;
diff --git a/src/tests/end2end/ComputeIndirectTests.cpp b/src/tests/end2end/ComputeIndirectTests.cpp
index d75dbfb..2d8bf19 100644
--- a/src/tests/end2end/ComputeIndirectTests.cpp
+++ b/src/tests/end2end/ComputeIndirectTests.cpp
@@ -38,8 +38,8 @@
             [[offset(0)]] workGroups : vec3<u32>;
         };
 
-        [[set(0), binding(0)]] var<uniform> input : InputBuf;
-        [[set(0), binding(1)]] var<storage_buffer> output : OutputBuf;
+        [[group(0), binding(0)]] var<uniform> input : InputBuf;
+        [[group(0), binding(1)]] var<storage_buffer> output : OutputBuf;
 
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
diff --git a/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp b/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
index 56ebfe9..9ef4624 100644
--- a/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
+++ b/src/tests/end2end/ComputeStorageBufferBarrierTests.cpp
@@ -36,7 +36,7 @@
             [[offset(0)]] data : [[stride(4)]] array<u32, 100>;
         };
 
-        [[set(0), binding(0)]] var<storage_buffer> buf : [[access(read_write)]] Buf;
+        [[group(0), binding(0)]] var<storage_buffer> buf : [[access(read_write)]] Buf;
 
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
@@ -92,8 +92,8 @@
             [[offset(0)]] data : [[stride(4)]] array<u32, 100>;
         };
 
-        [[set(0), binding(0)]] var<storage_buffer> src : [[access(read_write)]] Src;
-        [[set(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
+        [[group(0), binding(0)]] var<storage_buffer> src : [[access(read_write)]] Src;
+        [[group(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
         [[stage(compute)]] fn main() -> void {
@@ -163,8 +163,8 @@
             [[offset(0)]] data : [[stride(4)]] array<u32, 100>;
         };
 
-        [[set(0), binding(0)]] var<storage_buffer> src : [[access(read)]] Src;
-        [[set(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
+        [[group(0), binding(0)]] var<storage_buffer> src : [[access(read)]] Src;
+        [[group(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
 
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
@@ -232,8 +232,8 @@
             [[offset(0)]] data : [[stride(16)]] array<vec4<u32>, 25>;
         };
 
-        [[set(0), binding(0)]] var<uniform> src : Buf;
-        [[set(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Buf;
+        [[group(0), binding(0)]] var<uniform> src : Buf;
+        [[group(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Buf;
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
         [[stage(compute)]] fn main() -> void {
@@ -300,8 +300,8 @@
             [[offset(0)]] data : [[stride(16)]] array<vec4<u32>, 25>;
         };
 
-        [[set(0), binding(0)]] var<uniform> src : Buf;
-        [[set(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Buf;
+        [[group(0), binding(0)]] var<uniform> src : Buf;
+        [[group(0), binding(1)]] var<storage_buffer> dst : [[access(read_write)]] Buf;
         [[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;
 
         [[stage(compute)]] fn main() -> void {
diff --git a/src/tests/end2end/CreateReadyPipelineTests.cpp b/src/tests/end2end/CreateReadyPipelineTests.cpp
index f48fb7f..8e8ae01 100644
--- a/src/tests/end2end/CreateReadyPipelineTests.cpp
+++ b/src/tests/end2end/CreateReadyPipelineTests.cpp
@@ -38,7 +38,7 @@
         [[block]] struct SSBO {
             [[offset(0)]] value : u32;
         };
-        [[set(0), binding(0)]] var<storage_buffer> ssbo : SSBO;
+        [[group(0), binding(0)]] var<storage_buffer> ssbo : SSBO;
 
         [[stage(compute)]] fn main() -> void {
             ssbo.value = 1u;
@@ -105,7 +105,7 @@
         [[block]] struct SSBO {
             [[offset(0)]] value : u32;
         };
-        [[set(0), binding(0)]] var<storage_buffer> ssbo : SSBO;
+        [[group(0), binding(0)]] var<storage_buffer> ssbo : SSBO;
 
         [[stage(compute)]] fn main() -> void {
             ssbo.value = 1u;
diff --git a/src/tests/end2end/D3D12CachingTests.cpp b/src/tests/end2end/D3D12CachingTests.cpp
index 39742a9..c3619f6 100644
--- a/src/tests/end2end/D3D12CachingTests.cpp
+++ b/src/tests/end2end/D3D12CachingTests.cpp
@@ -229,7 +229,7 @@
         [[block]] struct Data {
             [[offset(0)]] data : u32;
         };
-        [[binding(0), set(0)]] var<storage_buffer> data : Data;
+        [[binding(0), group(0)]] var<storage_buffer> data : Data;
 
         [[stage(compute)]] fn write1() -> void {
             data.data = 1u;
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index be8d00e..47d7ad0 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -253,7 +253,7 @@
         // Sample the input texture and write out depth. |result| will only be set to 1 if we
         // pass the depth test.
         pipelineDescriptor.cFragmentStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> texture0 : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> texture0 : texture_2d<f32>;
             [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
 
             [[location(0)]] var<out> result : u32;
diff --git a/src/tests/end2end/DepthStencilSamplingTests.cpp b/src/tests/end2end/DepthStencilSamplingTests.cpp
index 35c2e74..c589a4f 100644
--- a/src/tests/end2end/DepthStencilSamplingTests.cpp
+++ b/src/tests/end2end/DepthStencilSamplingTests.cpp
@@ -83,8 +83,9 @@
         for (TestAspect aspect : aspects) {
             switch (aspect) {
                 case TestAspect::Depth:
-                    shaderSource << "[[set(0), binding(" << index << ")]] var<uniform_constant> tex"
-                                 << index << " : texture_2d<f32>;\n";
+                    shaderSource << "[[group(0), binding(" << index
+                                 << ")]] var<uniform_constant> tex" << index
+                                 << " : texture_2d<f32>;\n";
 
                     shaderSource << "[[location(" << index << ")]] var<out> result" << index
                                  << " : f32;\n";
@@ -94,8 +95,9 @@
                     pipelineDescriptor.cColorStates[index].format = wgpu::TextureFormat::R32Float;
                     break;
                 case TestAspect::Stencil:
-                    shaderSource << "[[set(0), binding(" << index << ")]] var<uniform_constant> tex"
-                                 << index << " : texture_2d<u32>;\n";
+                    shaderSource << "[[group(0), binding(" << index
+                                 << ")]] var<uniform_constant> tex" << index
+                                 << " : texture_2d<u32>;\n";
 
                     shaderSource << "[[location(" << index << ")]] var<out> result" << index
                                  << " : u32;\n";
@@ -138,11 +140,11 @@
         for (TestAspect aspect : aspects) {
             switch (aspect) {
                 case TestAspect::Depth:
-                    shaderSource << "[[set(0), binding(" << 2 * index
+                    shaderSource << "[[group(0), binding(" << 2 * index
                                  << ")]] var<uniform_constant> tex" << index
                                  << " : texture_2d<f32>;\n";
 
-                    shaderSource << "[[set(0), binding(" << 2 * index + 1
+                    shaderSource << "[[group(0), binding(" << 2 * index + 1
                                  << ")]] var<storage_buffer> result" << index
                                  << " : DepthResult;\n";
 
@@ -150,11 +152,11 @@
                                << ", vec2<i32>(0, 0), 0)[" << componentIndex << "];";
                     break;
                 case TestAspect::Stencil:
-                    shaderSource << "[[set(0), binding(" << 2 * index
+                    shaderSource << "[[group(0), binding(" << 2 * index
                                  << ")]] var<uniform_constant> tex" << index
                                  << " : texture_2d<u32>;\n";
 
-                    shaderSource << "[[set(0), binding(" << 2 * index + 1
+                    shaderSource << "[[group(0), binding(" << 2 * index + 1
                                  << ")]] var<storage_buffer> result" << index
                                  << " : StencilResult;\n";
 
@@ -186,12 +188,12 @@
             })");
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> samp : sampler_comparison;
-            [[set(0), binding(1)]] var<uniform_constant> tex : texture_depth_2d;
+            [[group(0), binding(0)]] var<uniform_constant> samp : sampler_comparison;
+            [[group(0), binding(1)]] var<uniform_constant> tex : texture_depth_2d;
             [[block]] struct Uniforms {
                 [[offset(0)]] compareRef : f32;
             };
-            [[set(0), binding(2)]] var<uniform> uniforms : Uniforms;
+            [[group(0), binding(2)]] var<uniform> uniforms : Uniforms;
 
             [[location(0)]] var<out> samplerResult : f32;
 
@@ -218,17 +220,17 @@
 
     wgpu::ComputePipeline CreateComparisonComputePipeline() {
         wgpu::ShaderModule csModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> samp : sampler_comparison;
-            [[set(0), binding(1)]] var<uniform_constant> tex : texture_depth_2d;
+            [[group(0), binding(0)]] var<uniform_constant> samp : sampler_comparison;
+            [[group(0), binding(1)]] var<uniform_constant> tex : texture_depth_2d;
             [[block]] struct Uniforms {
                 [[offset(0)]] compareRef : f32;
             };
-            [[set(0), binding(2)]] var<uniform> uniforms : Uniforms;
+            [[group(0), binding(2)]] var<uniform> uniforms : Uniforms;
 
             [[block]] struct SamplerResult {
                 [[offset(0)]] value : f32;
             };
-            [[set(0), binding(3)]] var<storage_buffer> samplerResult : SamplerResult;
+            [[group(0), binding(3)]] var<storage_buffer> samplerResult : SamplerResult;
 
             [[stage(compute)]] fn main() -> void {
                 samplerResult.value = textureSampleCompare(tex, samp, vec2<f32>(0.5, 0.5), uniforms.compareRef);
diff --git a/src/tests/end2end/DepthStencilStateTests.cpp b/src/tests/end2end/DepthStencilStateTests.cpp
index 1dee59a..66fc3a6 100644
--- a/src/tests/end2end/DepthStencilStateTests.cpp
+++ b/src/tests/end2end/DepthStencilStateTests.cpp
@@ -57,7 +57,7 @@
                 [[offset(0)]] color : vec3<f32>;
                 [[offset(12)]] depth : f32;
             };
-            [[set(0), binding(0)]] var<uniform> ubo : UBO;
+            [[group(0), binding(0)]] var<uniform> ubo : UBO;
             [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
 
@@ -77,7 +77,7 @@
                 [[offset(0)]] color : vec3<f32>;
                 [[offset(12)]] depth : f32;
             };
-            [[set(0), binding(0)]] var<uniform> ubo : UBO;
+            [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
             [[location(0)]] var<out> fragColor : vec4<f32>;
 
diff --git a/src/tests/end2end/DeviceLostTests.cpp b/src/tests/end2end/DeviceLostTests.cpp
index d537008..ca34617 100644
--- a/src/tests/end2end/DeviceLostTests.cpp
+++ b/src/tests/end2end/DeviceLostTests.cpp
@@ -116,7 +116,7 @@
         [[block]] struct UniformBuffer {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> ubo : UniformBuffer;
+        [[group(0), binding(0)]] var<uniform> ubo : UniformBuffer;
         [[stage(compute)]] fn main() -> void {
         })");
 
diff --git a/src/tests/end2end/DynamicBufferOffsetTests.cpp b/src/tests/end2end/DynamicBufferOffsetTests.cpp
index ad94836..3eb70e1 100644
--- a/src/tests/end2end/DynamicBufferOffsetTests.cpp
+++ b/src/tests/end2end/DynamicBufferOffsetTests.cpp
@@ -125,10 +125,10 @@
                 [[offset(0)]] value : vec2<u32>;
             };
 
-            [[set(0), binding(0)]] var<uniform> uBufferNotDynamic : Buffer1;
-            [[set(0), binding(1)]] var<storage_buffer> sBufferNotDynamic : [[access(read_write)]] Buffer2;
-            [[set(0), binding(3)]] var<uniform> uBuffer : Buffer3;
-            [[set(0), binding(4)]] var<storage_buffer> sBuffer : [[access(read_write)]] Buffer4;
+            [[group(0), binding(0)]] var<uniform> uBufferNotDynamic : Buffer1;
+            [[group(0), binding(1)]] var<storage_buffer> sBufferNotDynamic : [[access(read_write)]] Buffer2;
+            [[group(0), binding(3)]] var<uniform> uBuffer : Buffer3;
+            [[group(0), binding(4)]] var<storage_buffer> sBuffer : [[access(read_write)]] Buffer4;
         )";
 
         if (isInheritedPipeline) {
@@ -137,7 +137,7 @@
                     [[offset(0)]] value : vec2<u32>;
                 };
 
-                [[set(1), binding(0)]] var<uniform> paddingBlock : Buffer5;
+                [[group(1), binding(0)]] var<uniform> paddingBlock : Buffer5;
             )";
         }
 
@@ -194,10 +194,10 @@
                 [[offset(0)]] value : vec2<u32>;
             };
 
-            [[set(0), binding(0)]] var<uniform> uBufferNotDynamic : Buffer1;
-            [[set(0), binding(1)]] var<storage_buffer> sBufferNotDynamic : [[access(read_write)]] Buffer2;
-            [[set(0), binding(3)]] var<uniform> uBuffer : Buffer3;
-            [[set(0), binding(4)]] var<storage_buffer> sBuffer : [[access(read_write)]] Buffer4;
+            [[group(0), binding(0)]] var<uniform> uBufferNotDynamic : Buffer1;
+            [[group(0), binding(1)]] var<storage_buffer> sBufferNotDynamic : [[access(read_write)]] Buffer2;
+            [[group(0), binding(3)]] var<uniform> uBuffer : Buffer3;
+            [[group(0), binding(4)]] var<storage_buffer> sBuffer : [[access(read_write)]] Buffer4;
         )";
 
         if (isInheritedPipeline) {
@@ -206,7 +206,7 @@
                     [[offset(0)]] value : vec2<u32>;
                 };
 
-                [[set(1), binding(0)]] var<uniform> paddingBlock : Buffer5;
+                [[group(1), binding(0)]] var<uniform> paddingBlock : Buffer5;
             )";
         }
 
diff --git a/src/tests/end2end/EntryPointTests.cpp b/src/tests/end2end/EntryPointTests.cpp
index 776c2dc..202b784 100644
--- a/src/tests/end2end/EntryPointTests.cpp
+++ b/src/tests/end2end/EntryPointTests.cpp
@@ -78,7 +78,7 @@
         [[block]] struct Data {
             [[offset(0)]] data : u32;
         };
-        [[binding(0), set(0)]] var<storage_buffer> data : Data;
+        [[binding(0), group(0)]] var<storage_buffer> data : Data;
 
         [[stage(compute)]] fn write1() -> void {
             data.data = 1u;
diff --git a/src/tests/end2end/GpuMemorySynchronizationTests.cpp b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
index 7740cb3..4db671c 100644
--- a/src/tests/end2end/GpuMemorySynchronizationTests.cpp
+++ b/src/tests/end2end/GpuMemorySynchronizationTests.cpp
@@ -46,7 +46,7 @@
             [[block]] struct Data {
                 [[offset(0)]] a : i32;
             };
-            [[set(0), binding(0)]] var<storage_buffer> data : [[access(read_write)]] Data;
+            [[group(0), binding(0)]] var<storage_buffer> data : [[access(read_write)]] Data;
             [[stage(compute)]] fn main() -> void {
                 data.a = data.a + 1;
             })");
@@ -74,7 +74,7 @@
             [[block]] struct Data {
                 [[offset(0)]] i : i32;
             };
-            [[set(0), binding(0)]] var<storage_buffer> data : [[access(read_write)]] Data;
+            [[group(0), binding(0)]] var<storage_buffer> data : [[access(read_write)]] Data;
             [[location(0)]] var<out> fragColor : vec4<f32>;
             [[stage(fragment)]] fn main() -> void {
                 data.i = data.i + 1;
@@ -262,7 +262,7 @@
             [[block]] struct Data {
                 [[offset(0)]] a : f32;
             };
-            [[set(0), binding(0)]] var<storage_buffer> data : [[access(read_write)]] Data;
+            [[group(0), binding(0)]] var<storage_buffer> data : [[access(read_write)]] Data;
             [[stage(compute)]] fn main() -> void {
                 data.a = 1.0;
             })");
@@ -289,7 +289,7 @@
             [[block]] struct Contents {
                 [[offset(0)]] color : f32;
             };
-            [[set(0), binding(0)]] var<uniform> contents : Contents;
+            [[group(0), binding(0)]] var<uniform> contents : Contents;
 
             [[location(0)]] var<out> fragColor : vec4<f32>;
             [[stage(fragment)]] fn main() -> void {
@@ -461,12 +461,12 @@
         [[block]] struct VBContents {
             [[offset(0)]] pos : [[stride(16)]] array<vec4<f32>, 4>;
         };
-        [[set(0), binding(0)]] var<storage_buffer> vbContents : [[access(read_write)]] VBContents;
+        [[group(0), binding(0)]] var<storage_buffer> vbContents : [[access(read_write)]] VBContents;
 
         [[block]] struct IBContents {
             [[offset(0)]] indices : [[stride(16)]] array<vec4<i32>, 2>;
         };
-        [[set(0), binding(1)]] var<storage_buffer> ibContents : [[access(read_write)]] IBContents;
+        [[group(0), binding(1)]] var<storage_buffer> ibContents : [[access(read_write)]] IBContents;
 
         // TODO(crbug.com/tint/386): Use the same struct.
         [[block]] struct ColorContents1 {
@@ -475,8 +475,8 @@
         [[block]] struct ColorContents2 {
             [[offset(0)]] color : f32;
         };
-        [[set(0), binding(2)]] var<storage_buffer> uniformContents : [[access(read_write)]] ColorContents1;
-        [[set(0), binding(3)]] var<storage_buffer> storageContents : [[access(read_write)]] ColorContents2;
+        [[group(0), binding(2)]] var<storage_buffer> uniformContents : [[access(read_write)]] ColorContents1;
+        [[group(0), binding(3)]] var<storage_buffer> storageContents : [[access(read_write)]] ColorContents2;
 
         [[stage(compute)]] fn main() -> void {
             vbContents.pos[0] = vec4<f32>(-1.0, 1.0, 0.0, 1.0);
@@ -530,8 +530,8 @@
             [[offset(0)]] color : f32;
         };
 
-        [[set(0), binding(0)]] var<uniform> uniformBuffer : Buf;
-        [[set(0), binding(1)]] var<storage_buffer> storageBuffer : [[access(read)]] Buf;
+        [[group(0), binding(0)]] var<uniform> uniformBuffer : Buf;
+        [[group(0), binding(1)]] var<storage_buffer> storageBuffer : [[access(read)]] Buf;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
         [[stage(fragment)]] fn main() -> void {
@@ -588,7 +588,7 @@
             [[offset(768)]] color1 : f32;
         };
 
-        [[set(0), binding(0)]] var<storage_buffer> contents : [[access(read_write)]] Contents;
+        [[group(0), binding(0)]] var<storage_buffer> contents : [[access(read_write)]] Contents;
 
         [[stage(compute)]] fn main() -> void {
             contents.pos[0] = vec4<f32>(-1.0, 1.0, 0.0, 1.0);
@@ -642,8 +642,8 @@
         [[block]] struct Buf {
             [[offset(0)]] color : f32;
         };
-        [[set(0), binding(0)]] var<uniform> uniformBuffer : Buf;
-        [[set(0), binding(1)]] var<storage_buffer> storageBuffer : [[access(read)]] Buf;
+        [[group(0), binding(0)]] var<uniform> uniformBuffer : Buf;
+        [[group(0), binding(1)]] var<storage_buffer> storageBuffer : [[access(read)]] Buf;
 
         [[location(0)]] var<out> fragColor : vec4<f32>;
         [[stage(fragment)]] fn main() -> void {
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 5fb8133..c2c1b72 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -274,8 +274,8 @@
                 }
             )");
             wgpu::ShaderModule fs = utils::CreateShaderModuleFromWGSL(device, R"(
-                [[set(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
-                [[set(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
+                [[group(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
+                [[group(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
 
                 [[location(0)]] var<in> texCoord : vec2<f32>;
                 [[location(0)]] var<out> fragColor : vec4<f32>;
diff --git a/src/tests/end2end/MultisampledSamplingTests.cpp b/src/tests/end2end/MultisampledSamplingTests.cpp
index aeed4ee..0ab3dd4 100644
--- a/src/tests/end2end/MultisampledSamplingTests.cpp
+++ b/src/tests/end2end/MultisampledSamplingTests.cpp
@@ -90,14 +90,14 @@
             wgpu::ComputePipelineDescriptor desc = {};
             desc.computeStage.entryPoint = "main";
             desc.computeStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
-                [[set(0), binding(0)]] var<uniform_constant> texture0 : texture_multisampled_2d<f32>;
-                [[set(0), binding(1)]] var<uniform_constant> texture1 : texture_multisampled_2d<f32>;
+                [[group(0), binding(0)]] var<uniform_constant> texture0 : texture_multisampled_2d<f32>;
+                [[group(0), binding(1)]] var<uniform_constant> texture1 : texture_multisampled_2d<f32>;
 
                 [[block]] struct Results {
                     [[offset(0)]] colorSamples : [[stride(4)]] array<f32, 4>;
                     [[offset(16)]] depthSamples : [[stride(4)]] array<f32, 4>;
                 };
-                [[set(0), binding(2)]] var<storage_buffer> results : [[access(read_write)]] Results;
+                [[group(0), binding(2)]] var<storage_buffer> results : [[access(read_write)]] Results;
 
                 [[stage(compute)]] fn main() -> void {
                     for (var i : i32 = 0; i < 4; i = i + 1) {
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index a53a0b3..2f9a8d3 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -66,10 +66,10 @@
             };
 
             // The length should be 1 because the buffer is 4-byte long.
-            [[set(0), binding(0)]] var<storage_buffer> buffer1 : [[access(read)]] DataBuffer1;
+            [[group(0), binding(0)]] var<storage_buffer> buffer1 : [[access(read)]] DataBuffer1;
 
             // The length should be 64 because the buffer is 256 bytes long.
-            [[set(0), binding(1)]] var<storage_buffer> buffer2 : [[access(read)]] DataBuffer2;
+            [[group(0), binding(1)]] var<storage_buffer> buffer2 : [[access(read)]] DataBuffer2;
 
             // The length should be (512 - 16*4) / 8 = 56 because the buffer is 512 bytes long
             // and the structure is 8 bytes big.
@@ -82,7 +82,7 @@
                 [[offset(0)]] garbage : mat4x4<f32>;
                 [[offset(64)]] data : [[stride(8)]] array<Buffer3Data>;
             };
-            [[set(0), binding(2)]] var<storage_buffer> buffer3 : [[access(read)]] Buffer3;
+            [[group(0), binding(2)]] var<storage_buffer> buffer3 : [[access(read)]] Buffer3;
         )";
 
         // See comments in the shader for an explanation of these values
@@ -132,7 +132,7 @@
         [[block]] struct ResultBuffer {
             [[offset(0)]] data : [[stride(4)]] array<u32, 3>;
         };
-        [[set(1), binding(0)]] var<storage_buffer> result : [[access(read_write)]] ResultBuffer;
+        [[group(1), binding(0)]] var<storage_buffer> result : [[access(read_write)]] ResultBuffer;
         )" + mShaderInterface + R"(
         [[stage(compute)]] fn main() -> void {
             result.data[0] = arrayLength(buffer1.data);
diff --git a/src/tests/end2end/RenderBundleTests.cpp b/src/tests/end2end/RenderBundleTests.cpp
index 90c1823..5553562 100644
--- a/src/tests/end2end/RenderBundleTests.cpp
+++ b/src/tests/end2end/RenderBundleTests.cpp
@@ -43,7 +43,7 @@
             [[block]] struct Ubo {
                 [[offset(0)]] color : vec4<f32>;
             };
-            [[set(0), binding(0)]] var<uniform> fragmentUniformBuffer : Ubo;
+            [[group(0), binding(0)]] var<uniform> fragmentUniformBuffer : Ubo;
 
             [[stage(fragment)]] fn main() -> void {
                 fragColor = fragmentUniformBuffer.color;
diff --git a/src/tests/end2end/SamplerFilterAnisotropicTests.cpp b/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
index 4ffbe55..e94ddb2 100644
--- a/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
+++ b/src/tests/end2end/SamplerFilterAnisotropicTests.cpp
@@ -45,7 +45,7 @@
             [[location(0)]] var<in> position : vec4<f32>;
             [[location(1)]] var<in> uv : vec2<f32>;
 
-            [[set(0), binding(2)]] var<uniform> uniforms : Uniforms;
+            [[group(0), binding(2)]] var<uniform> uniforms : Uniforms;
 
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[location(0)]] var<out> fragUV : vec2<f32>;
@@ -56,8 +56,8 @@
             }
         )");
         wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
-            [[set(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
+            [[group(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
 
             [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
 
diff --git a/src/tests/end2end/SamplerTests.cpp b/src/tests/end2end/SamplerTests.cpp
index d652c15..bb7f7e6 100644
--- a/src/tests/end2end/SamplerTests.cpp
+++ b/src/tests/end2end/SamplerTests.cpp
@@ -70,8 +70,8 @@
             }
         )");
         auto fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
-            [[set(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> sampler0 : sampler;
+            [[group(0), binding(1)]] var<uniform_constant> texture0 : texture_2d<f32>;
 
             [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
 
diff --git a/src/tests/end2end/StorageTextureTests.cpp b/src/tests/end2end/StorageTextureTests.cpp
index 9ca5494..ca03cae 100644
--- a/src/tests/end2end/StorageTextureTests.cpp
+++ b/src/tests/end2end/StorageTextureTests.cpp
@@ -165,7 +165,7 @@
                                     bool is2DArray,
                                     uint32_t binding) {
         std::ostringstream ostream;
-        ostream << "[[set(0), binding(" << binding << ")]] "
+        ostream << "[[group(0), binding(" << binding << ")]] "
                 << "var<uniform_constant> storageImage" << binding << " : "
                 << "[[access(" << accessQualifier << ")]] "
                 << "texture_storage_2d";
@@ -712,7 +712,7 @@
   [[offset(0)]] result : u32;
 };
 
-[[set(0), binding(1)]] var<storage_buffer> dstBuffer : DstBuffer;
+[[group(0), binding(1)]] var<storage_buffer> dstBuffer : DstBuffer;
 )" << CommonReadOnlyTestCode(format)
                  << R"(
 [[stage(compute)]] fn main() -> void {
@@ -917,7 +917,7 @@
   [[offset(0)]] result : u32;
 };
 
-[[set(0), binding(1)]] var<storage_buffer> dstBuffer : DstBuffer;
+[[group(0), binding(1)]] var<storage_buffer> dstBuffer : DstBuffer;
 )" << CommonReadOnlyTestCode(kTextureFormat, true)
              << R"(
 [[stage(compute)]] fn main() -> void {
@@ -964,8 +964,8 @@
         kTextureFormat, wgpu::TextureUsage::Storage | wgpu::TextureUsage::CopySrc, 1u, 1u);
 
     wgpu::ShaderModule module = utils::CreateShaderModuleFromWGSL(device, R"(
-[[set(0), binding(0)]] var<uniform_constant> Src : [[access(read)]]  texture_storage_2d<r32uint>;
-[[set(0), binding(1)]] var<uniform_constant> Dst : [[access(write)]] texture_storage_2d<r32uint>;
+[[group(0), binding(0)]] var<uniform_constant> Src : [[access(read)]]  texture_storage_2d<r32uint>;
+[[group(0), binding(1)]] var<uniform_constant> Dst : [[access(write)]] texture_storage_2d<r32uint>;
 [[stage(compute)]] fn main() -> void {
   var srcValue : vec4<u32> = textureLoad(Src, vec2<i32>(0, 0));
   srcValue.x = srcValue.x + 1u;
@@ -1040,8 +1040,8 @@
     wgpu::Texture storageTexture2 = CreateTexture(
         kTextureFormat, wgpu::TextureUsage::Sampled | wgpu::TextureUsage::Storage, 1u, 1u);
     wgpu::ShaderModule module = utils::CreateShaderModuleFromWGSL(device, R"(
-[[set(0), binding(0)]] var<uniform_constant> Src : texture_2d<u32>;
-[[set(0), binding(1)]] var<uniform_constant> Dst : [[access(write)]] texture_storage_2d<r32uint>;
+[[group(0), binding(0)]] var<uniform_constant> Src : texture_2d<u32>;
+[[group(0), binding(1)]] var<uniform_constant> Dst : [[access(write)]] texture_storage_2d<r32uint>;
 [[stage(compute)]] fn main() -> void {
   var srcValue : vec4<u32> = textureLoad(Src, vec2<i32>(0, 0));
   srcValue.x = srcValue.x + 1u;
@@ -1139,13 +1139,13 @@
 })";
 
     const char* kCommonWriteOnlyZeroInitTestCodeFragment = R"(
-[[set(0), binding(0)]] var<uniform_constant> dstImage : [[access(write)]] texture_storage_2d<r32uint>;
+[[group(0), binding(0)]] var<uniform_constant> dstImage : [[access(write)]] texture_storage_2d<r32uint>;
 
 [[stage(fragment)]] fn main() -> void {
   textureStore(dstImage, vec2<i32>(0, 0), vec4<u32>(1u, 0u, 0u, 1u));
 })";
     const char* kCommonWriteOnlyZeroInitTestCodeCompute = R"(
-[[set(0), binding(0)]] var<uniform_constant> dstImage : [[access(write)]] texture_storage_2d<r32uint>;
+[[group(0), binding(0)]] var<uniform_constant> dstImage : [[access(write)]] texture_storage_2d<r32uint>;
 
 [[stage(compute)]] fn main() -> void {
   textureStore(dstImage, vec2<i32>(0, 0), vec4<u32>(1u, 0u, 0u, 1u));
@@ -1162,7 +1162,7 @@
     // green as the output color, otherwise uses red instead.
     const char* kVertexShader = kSimpleVertexShader;
     const std::string kFragmentShader = std::string(R"(
-[[set(0), binding(0)]] var<uniform_constant> srcImage : [[access(read)]] texture_storage_2d<r32uint>;
+[[group(0), binding(0)]] var<uniform_constant> srcImage : [[access(read)]] texture_storage_2d<r32uint>;
 [[location(0)]] var<out> o_color : vec4<f32>;
 )") + kCommonReadOnlyZeroInitTestCode +
                                         R"(
@@ -1189,8 +1189,8 @@
   [[offset(0)]] result : u32;
 };
 
-[[set(0), binding(0)]] var<uniform_constant> srcImage : [[access(read)]] texture_storage_2d<r32uint>;
-[[set(0), binding(1)]] var<storage_buffer> dstBuffer : DstBuffer;
+[[group(0), binding(0)]] var<uniform_constant> srcImage : [[access(read)]] texture_storage_2d<r32uint>;
+[[group(0), binding(1)]] var<storage_buffer> dstBuffer : DstBuffer;
 )") + kCommonReadOnlyZeroInitTestCode + R"(
 [[stage(compute)]] fn main() -> void {
   if (doTest()) {
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index 8cb1055..4dacc82 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -163,7 +163,7 @@
         const char* type = utils::GetColorTextureComponentWGSLType(sampleFormatInfo.format);
 
         std::ostringstream fsSource;
-        fsSource << "[[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<" << type
+        fsSource << "[[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<" << type
                  << ">;\n";
         fsSource << "[[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;\n";
         fsSource << "[[location(0)]] var<out> fragColor : vec4<" << type << ">;\n";
diff --git a/src/tests/end2end/TextureSubresourceTests.cpp b/src/tests/end2end/TextureSubresourceTests.cpp
index 337d14f..e58df56 100644
--- a/src/tests/end2end/TextureSubresourceTests.cpp
+++ b/src/tests/end2end/TextureSubresourceTests.cpp
@@ -106,8 +106,8 @@
             })");
 
         wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> samp : sampler;
-            [[set(0), binding(1)]] var<uniform_constant> tex : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> samp : sampler;
+            [[group(0), binding(1)]] var<uniform_constant> tex : texture_2d<f32>;
 
             [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
 
diff --git a/src/tests/perf_tests/SubresourceTrackingPerf.cpp b/src/tests/perf_tests/SubresourceTrackingPerf.cpp
index 8be7e4b..8e82d15 100644
--- a/src/tests/perf_tests/SubresourceTrackingPerf.cpp
+++ b/src/tests/perf_tests/SubresourceTrackingPerf.cpp
@@ -78,7 +78,7 @@
         )");
         pipelineDesc.cFragmentStage.module = utils::CreateShaderModuleFromWGSL(device, R"(
             [[location(0)]] var<out> FragColor : vec4<f32>;
-            [[set(0), binding(0)]] var<uniform_constant> materials : texture_sampled_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> materials : texture_sampled_2d<f32>;
             [[stage(fragment)]] fn main() -> void {
                 FragColor = vec4<f32>(1.0, 0.0, 0.0, 1.0);
             }
diff --git a/src/tests/unittests/validation/BindGroupValidationTests.cpp b/src/tests/unittests/validation/BindGroupValidationTests.cpp
index 99ba07c..6245dcf 100644
--- a/src/tests/unittests/validation/BindGroupValidationTests.cpp
+++ b/src/tests/unittests/validation/BindGroupValidationTests.cpp
@@ -1094,10 +1094,10 @@
                     [[offset(0)]] value : vec2<f32>;
                 };
 
-                [[set(0), binding(0)]] var<uniform> uBufferDynamic : S;
-                [[set(0), binding(1)]] var<uniform> uBuffer : S;
-                [[set(0), binding(2)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
-                [[set(0), binding(3)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
+                [[group(0), binding(0)]] var<uniform> uBufferDynamic : S;
+                [[group(0), binding(1)]] var<uniform> uBuffer : S;
+                [[group(0), binding(2)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
+                [[group(0), binding(3)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
 
                 [[stage(fragment)]] fn main() -> void {
                 })");
@@ -1117,10 +1117,10 @@
                     [[offset(0)]] value : vec2<f32>;
                 };
 
-                [[set(0), binding(0)]] var<uniform> uBufferDynamic : S;
-                [[set(0), binding(1)]] var<uniform> uBuffer : S;
-                [[set(0), binding(2)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
-                [[set(0), binding(3)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
+                [[group(0), binding(0)]] var<uniform> uBufferDynamic : S;
+                [[group(0), binding(1)]] var<uniform> uBuffer : S;
+                [[group(0), binding(2)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
+                [[group(0), binding(3)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
 
                 [[stage(compute), workgroup_size(4, 4, 1)]] fn main() -> void {
                 })");
@@ -1542,7 +1542,7 @@
 
             for (uint32_t b = 0; b < layout.size(); ++b) {
                 wgpu::BufferBindingType binding = layout[b];
-                ss << "[[set(" << l << "), binding(" << b << ")]] ";
+                ss << "[[group(" << l << "), binding(" << b << ")]] ";
                 switch (binding) {
                     case wgpu::BufferBindingType::Storage:
                         ss << "var<storage_buffer> set" << l << "_binding" << b
@@ -1713,8 +1713,8 @@
                 [[offset(0)]] value : vec2<f32>;
             };
 
-            [[set(0), binding(0)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
-            [[set(1), binding(0)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
+            [[group(0), binding(0)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
+            [[group(1), binding(0)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
 
             [[stage(fragment)]] fn main() -> void {
             })",
@@ -1746,8 +1746,8 @@
                 [[offset(0)]] value : vec2<f32>;
             };
 
-            [[set(0), binding(0)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
-            [[set(1), binding(0)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
+            [[group(0), binding(0)]] var<storage_buffer> sBufferDynamic : [[access(read_write)]] S;
+            [[group(1), binding(0)]] var<storage_buffer> sReadonlyBufferDynamic : [[access(read)]] S;
 
             [[stage(compute), workgroup_size(4, 4, 1)]] fn main() -> void {
             })",
@@ -1789,11 +1789,11 @@
 
 TEST_F(BindGroupLayoutCompatibilityTest, TextureViewDimension) {
     constexpr char kTexture2DShaderFS[] = R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
         [[stage(fragment)]] fn main() -> void {
         })";
     constexpr char kTexture2DShaderCS[] = R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
         [[stage(compute)]] fn main() -> void {
         })";
 
@@ -1826,11 +1826,11 @@
                                       wgpu::TextureViewDimension::e2DArray}})}));
 
     constexpr char kTexture2DArrayShaderFS[] = R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d_array<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d_array<f32>;
         [[stage(fragment)]] fn main() -> void {
         })";
     constexpr char kTexture2DArrayShaderCS[] = R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d_array<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d_array<f32>;
         [[stage(compute)]] fn main() -> void {
         })";
 
@@ -2079,7 +2079,7 @@
             device, {{0, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Filtering}});
 
         CreateFragmentPipeline(&bindGroupLayout, R"(
-            [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler;
+            [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler;
             [[stage(fragment)]] fn main() -> void {
             })");
     }
@@ -2090,7 +2090,7 @@
             device, {{0, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Comparison}});
 
         CreateFragmentPipeline(&bindGroupLayout, R"(
-            [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler_comparison;
+            [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler_comparison;
             [[stage(fragment)]] fn main() -> void {
             })");
     }
@@ -2101,7 +2101,7 @@
             device, {{0, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Filtering}});
 
         ASSERT_DEVICE_ERROR(CreateFragmentPipeline(&bindGroupLayout, R"(
-            [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler_comparison;
+            [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler_comparison;
             [[stage(fragment)]] fn main() -> void {
             })"));
     }
@@ -2112,7 +2112,7 @@
             device, {{0, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Comparison}});
 
         ASSERT_DEVICE_ERROR(CreateFragmentPipeline(&bindGroupLayout, R"(
-            [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler;
+            [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler;
             [[stage(fragment)]] fn main() -> void {
             })"));
     }
diff --git a/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp b/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp
index 2dbd5ee..dff2b7d 100644
--- a/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp
+++ b/src/tests/unittests/validation/GetBindGroupLayoutValidationTests.cpp
@@ -42,8 +42,8 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniform0 : S;
-        [[set(1), binding(0)]] var<uniform> uniform1 : S;
+        [[group(0), binding(0)]] var<uniform> uniform0 : S;
+        [[group(1), binding(0)]] var<uniform> uniform1 : S;
 
         [[stage(vertex)]] fn main() -> void {
         })");
@@ -52,12 +52,12 @@
         [[block]] struct S2 {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(2), binding(0)]] var<uniform> uniform2 : S2;
+        [[group(2), binding(0)]] var<uniform> uniform2 : S2;
 
         [[block]] struct S3 {
             [[offset(0)]] pos : mat4x4<f32>;
         };
-        [[set(3), binding(0)]] var<storage_buffer> storage3 : S3;
+        [[group(3), binding(0)]] var<storage_buffer> storage3 : S3;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -90,7 +90,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -128,7 +128,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(compute)]] fn main() -> void {
         })");
@@ -174,7 +174,7 @@
             [[block]] struct S {
                 [[offset(0)]] pos : vec4<f32>;
             };
-            [[set(0), binding(0)]] var<storage_buffer> ssbo : S;
+            [[group(0), binding(0)]] var<storage_buffer> ssbo : S;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -186,7 +186,7 @@
             [[block]] struct S {
                 [[offset(0)]] pos : vec4<f32>;
             };
-            [[set(0), binding(0)]] var<uniform> uniforms : S;
+            [[group(0), binding(0)]] var<uniform> uniforms : S;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -199,7 +199,7 @@
             [[block]] struct S {
                 [[offset(0)]] pos : vec4<f32>;
             };
-            [[set(0), binding(0)]] var<storage_buffer> ssbo : [[access(read)]] S;
+            [[group(0), binding(0)]] var<storage_buffer> ssbo : [[access(read)]] S;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -211,7 +211,7 @@
     {
         binding.texture.sampleType = wgpu::TextureSampleType::Float;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -221,7 +221,7 @@
     {
         binding.texture.multisampled = true;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_multisampled_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_multisampled_2d<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -232,7 +232,7 @@
     {
         binding.sampler.type = wgpu::SamplerBindingType::Filtering;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler;
+            [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -254,7 +254,7 @@
     {
         binding.texture.viewDimension = wgpu::TextureViewDimension::e1D;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_1d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_1d<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -264,7 +264,7 @@
     {
         binding.texture.viewDimension = wgpu::TextureViewDimension::e2D;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -274,7 +274,7 @@
     {
         binding.texture.viewDimension = wgpu::TextureViewDimension::e2DArray;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d_array<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d_array<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -284,7 +284,7 @@
     {
         binding.texture.viewDimension = wgpu::TextureViewDimension::e3D;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_3d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_3d<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -294,7 +294,7 @@
     {
         binding.texture.viewDimension = wgpu::TextureViewDimension::Cube;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_cube<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_cube<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -304,7 +304,7 @@
     {
         binding.texture.viewDimension = wgpu::TextureViewDimension::CubeArray;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_cube_array<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_cube_array<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -325,7 +325,7 @@
     {
         binding.texture.sampleType = wgpu::TextureSampleType::Float;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -335,7 +335,7 @@
     {
         binding.texture.sampleType = wgpu::TextureSampleType::Sint;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<i32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<i32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -345,7 +345,7 @@
     {
         binding.texture.sampleType = wgpu::TextureSampleType::Uint;
         wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
-            [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<u32>;
+            [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<u32>;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -371,7 +371,7 @@
             [[block]] struct S {
                 [[offset(0)]] pos : vec4<f32>;
             };
-            [[set(0), binding(0)]] var<uniform> uniforms : S;
+            [[group(0), binding(0)]] var<uniform> uniforms : S;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -384,7 +384,7 @@
             [[block]] struct S {
                 [[offset(0)]] pos : vec4<f32>;
             };
-            [[set(0), binding(1)]] var<uniform> uniforms : S;
+            [[group(0), binding(1)]] var<uniform> uniforms : S;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -397,7 +397,7 @@
             [[block]] struct S {
                 [[offset(0)]] pos : vec4<f32>;
             };
-            [[set(0), binding(1)]] var<uniform> uniforms : S;
+            [[group(0), binding(1)]] var<uniform> uniforms : S;
 
             [[stage(fragment)]] fn main() -> void {
             })");
@@ -411,8 +411,8 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniform0 : S;
-        [[set(1), binding(0)]] var<uniform> uniform1 : S;
+        [[group(0), binding(0)]] var<uniform> uniform0 : S;
+        [[group(1), binding(0)]] var<uniform> uniform1 : S;
 
         [[stage(vertex)]] fn main() -> void {
         })");
@@ -421,7 +421,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(1), binding(0)]] var<uniform> uniforms : S;
+        [[group(1), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -440,7 +440,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : f32;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(vertex)]] fn main() -> void {
         })");
@@ -449,7 +449,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : mat4x4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(vertex)]] fn main() -> void {
         })");
@@ -458,7 +458,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : f32;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -467,7 +467,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : mat4x4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -522,7 +522,7 @@
         })");
 
     wgpu::ShaderModule vsModuleSampler = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler;
+        [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler;
         [[stage(vertex)]] fn main() -> void {
         })");
 
@@ -531,7 +531,7 @@
         })");
 
     wgpu::ShaderModule fsModuleSampler = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> mySampler: sampler;
+        [[group(0), binding(0)]] var<uniform_constant> mySampler: sampler;
         [[stage(fragment)]] fn main() -> void {
         })");
 
@@ -584,7 +584,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> ubo : S;
+        [[group(0), binding(0)]] var<uniform> ubo : S;
 
         [[stage(vertex)]] fn main() -> void {
         })");
@@ -593,7 +593,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<storage_buffer> ssbo : S;
+        [[group(0), binding(0)]] var<storage_buffer> ssbo : S;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -609,13 +609,13 @@
 // Test it is invalid to have conflicting binding texture multisampling in the shaders.
 TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) {
     wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
         [[stage(vertex)]] fn main() -> void {
         })");
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_multisampled_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_multisampled_2d<f32>;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -631,13 +631,13 @@
 // Test it is invalid to have conflicting binding texture dimension in the shaders.
 TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) {
     wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
         [[stage(vertex)]] fn main() -> void {
         })");
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_3d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_3d<f32>;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -653,13 +653,13 @@
 // Test it is invalid to have conflicting binding texture component type in the shaders.
 TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureComponentType) {
     wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<f32>;
 
         [[stage(vertex)]] fn main() -> void {
         })");
 
     wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-        [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<i32>;
+        [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<i32>;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -691,8 +691,8 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms0 : S;
-        [[set(2), binding(0)]] var<uniform> uniforms2 : S;
+        [[group(0), binding(0)]] var<uniform> uniforms0 : S;
+        [[group(2), binding(0)]] var<uniform> uniforms2 : S;
 
         [[stage(fragment)]] fn main() -> void {
         })");
@@ -733,7 +733,7 @@
         [[block]] struct S {
             [[offset(0)]] pos : vec4<f32>;
         };
-        [[set(0), binding(0)]] var<uniform> uniforms : S;
+        [[group(0), binding(0)]] var<uniform> uniforms : S;
 
         [[stage(vertex)]] fn main() -> void {
         })");
diff --git a/src/tests/unittests/validation/RenderBundleValidationTests.cpp b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
index 54a60e8..5490a15 100644
--- a/src/tests/unittests/validation/RenderBundleValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderBundleValidationTests.cpp
@@ -33,7 +33,7 @@
                 [[block]] struct S {
                     [[offset(0)]] transform : mat2x2<f32>;
                 };
-                [[set(0), binding(0)]] var<uniform> uniforms : S;
+                [[group(0), binding(0)]] var<uniform> uniforms : S;
 
                 [[stage(vertex)]] fn main() -> void {
                 })");
@@ -42,12 +42,12 @@
                 [[block]] struct Uniforms {
                     [[offset(0)]] color : vec4<f32>;
                 };
-                [[set(1), binding(0)]] var<uniform> uniforms : Uniforms;
+                [[group(1), binding(0)]] var<uniform> uniforms : Uniforms;
 
                 [[block]] struct Storage {
                     [[offset(0)]] dummy : [[stride(4)]] array<f32>;
                 };
-                [[set(1), binding(1)]] var<storage_buffer> ssbo : [[access(read_write)]] Storage;
+                [[group(1), binding(1)]] var<storage_buffer> ssbo : [[access(read_write)]] Storage;
 
                 [[stage(fragment)]] fn main() -> void {
                 })");
diff --git a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
index aa3f7d5..3637673 100644
--- a/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
+++ b/src/tests/unittests/validation/RenderPipelineValidationTests.cpp
@@ -397,7 +397,7 @@
 
             std::ostringstream stream;
             stream << R"(
-                [[set(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<)"
+                [[group(0), binding(0)]] var<uniform_constant> myTexture : texture_2d<)"
                    << kScalarTypes[i] << R"(>;
 
                 [[stage(fragment)]] fn main() -> void {
@@ -446,7 +446,7 @@
 
             std::ostringstream stream;
             stream << R"(
-                [[set(0), binding(0)]] var<uniform_constant> myTexture : )"
+                [[group(0), binding(0)]] var<uniform_constant> myTexture : )"
                    << kTextureKeywords[i] << R"(<f32>;
                 [[stage(fragment)]] fn main() -> void {
                 })";
@@ -474,7 +474,7 @@
         [[block]] struct Dst {
             [[offset(0)]] data : [[stride(4)]] array<u32, 100>;
         };
-        [[set(0), binding(0)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
+        [[group(0), binding(0)]] var<storage_buffer> dst : [[access(read_write)]] Dst;
         [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
         [[stage(vertex)]] fn main() -> void {
             dst.data[VertexIndex] = 0x1234u;
diff --git a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
index 3b01ca6..a11be96 100644
--- a/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
+++ b/src/tests/unittests/validation/ResourceUsageTrackingTests.cpp
@@ -779,7 +779,7 @@
                 [[block]] struct RBuffer {
                     [[offset(0)]] value : f32;
                 };
-                [[set(0), binding(0)]] var<storage_buffer> rBuffer : [[access(read)]] RBuffer;
+                [[group(0), binding(0)]] var<storage_buffer> rBuffer : [[access(read)]] RBuffer;
                 [[stage(fragment)]] fn main() -> void {
                 })");
             utils::ComboRenderPipelineDescriptor pipelineDescriptor(device);
@@ -819,7 +819,7 @@
                 [[block]] struct RBuffer {
                     [[offset(0)]] value : f32;
                 };
-                [[set(0), binding(0)]] var<storage_buffer> rBuffer : [[access(read)]] RBuffer;
+                [[group(0), binding(0)]] var<storage_buffer> rBuffer : [[access(read)]] RBuffer;
                 [[stage(compute)]] fn main() -> void {
                 })");
             wgpu::ComputePipelineDescriptor pipelineDescriptor;
@@ -1554,7 +1554,7 @@
                 })");
 
             wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-                [[set(0), binding(0)]] var<uniform_constant> tex : [[access(read)]] texture_storage_2d<rgba8unorm>;
+                [[group(0), binding(0)]] var<uniform_constant> tex : [[access(read)]] texture_storage_2d<rgba8unorm>;
                 [[stage(fragment)]] fn main() -> void {
                 })");
             utils::ComboRenderPipelineDescriptor pipelineDescriptor(device);
@@ -1580,7 +1580,7 @@
         {
             // Create a passthrough compute pipeline with a readonly storage texture
             wgpu::ShaderModule csModule = utils::CreateShaderModuleFromWGSL(device, R"(
-                [[set(0), binding(0)]] var<uniform_constant> tex : [[access(read)]] texture_storage_2d<rgba8unorm>;
+                [[group(0), binding(0)]] var<uniform_constant> tex : [[access(read)]] texture_storage_2d<rgba8unorm>;
                 [[stage(compute)]] fn main() -> void {
                 })");
             wgpu::ComputePipelineDescriptor pipelineDescriptor;
diff --git a/src/tests/unittests/validation/StorageTextureValidationTests.cpp b/src/tests/unittests/validation/StorageTextureValidationTests.cpp
index 838ae8d..11a9b0e 100644
--- a/src/tests/unittests/validation/StorageTextureValidationTests.cpp
+++ b/src/tests/unittests/validation/StorageTextureValidationTests.cpp
@@ -125,7 +125,7 @@
     // Readonly storage texture can be declared in a vertex shader.
     {
         wgpu::ShaderModule vsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> image0 : [[access(read)]] texture_storage_2d<rgba8unorm>;
+            [[group(0), binding(0)]] var<uniform_constant> image0 : [[access(read)]] texture_storage_2d<rgba8unorm>;
             [[builtin(vertex_idx)]] var<in> VertexIndex : u32;
             [[builtin(position)]] var<out> Position : vec4<f32>;
             [[stage(vertex)]] fn main() -> void {
@@ -142,7 +142,7 @@
     // Read-only storage textures can be declared in a fragment shader.
     {
         wgpu::ShaderModule fsModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> image0 : [[access(read)]] texture_storage_2d<rgba8unorm>;
+            [[group(0), binding(0)]] var<uniform_constant> image0 : [[access(read)]] texture_storage_2d<rgba8unorm>;
             [[builtin(frag_coord)]] var<in> FragCoord : vec4<f32>;
             [[location(0)]] var<out> fragColor : vec4<f32>;
             [[stage(fragment)]] fn main() -> void {
@@ -197,13 +197,13 @@
     // Read-only storage textures can be declared in a compute shader.
     {
         wgpu::ShaderModule csModule = utils::CreateShaderModuleFromWGSL(device, R"(
-            [[set(0), binding(0)]] var<uniform_constant> image0 : [[access(read)]] texture_storage_2d<rgba8unorm>;
+            [[group(0), binding(0)]] var<uniform_constant> image0 : [[access(read)]] texture_storage_2d<rgba8unorm>;
             [[builtin(local_invocation_id)]] var<in> LocalInvocationID : vec3<u32>;
 
             [[block]] struct Buf {
                 [[offset(0)]] data : f32;
             };
-            [[set(0), binding(1)]] var<storage_buffer> buf : [[access(read_write)]] Buf;
+            [[group(0), binding(1)]] var<storage_buffer> buf : [[access(read_write)]] Buf;
 
             [[stage(compute)]] fn main() -> void {
                  buf.data = textureLoad(image0, vec2<i32>(LocalInvocationID.xy)).x;