wgsl: Replace [[decoration]] with @decoration

Deprecate the old syntax. Migrate everything to the new syntax.

Bug: tint:1382
Change-Id: Ide12b2e927b17dc93b9714c7049090864cc568d3
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/77260
Reviewed-by: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
Commit-Queue: David Neto <dneto@google.com>
diff --git a/test/access/let/matrix.spvasm.expected.wgsl b/test/access/let/matrix.spvasm.expected.wgsl
index e779e9f..b7b9fcf 100644
--- a/test/access/let/matrix.spvasm.expected.wgsl
+++ b/test/access/let/matrix.spvasm.expected.wgsl
@@ -3,7 +3,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/access/let/matrix.wgsl b/test/access/let/matrix.wgsl
index 12af9c2..b4c77cf 100644
--- a/test/access/let/matrix.wgsl
+++ b/test/access/let/matrix.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(1., 2., 3.), vec3<f32>(4., 5., 6.), vec3<f32>(7., 8., 9.));
   let v : vec3<f32> = m[1];
diff --git a/test/access/let/matrix.wgsl.expected.wgsl b/test/access/let/matrix.wgsl.expected.wgsl
index 546b0f3..f5dbdfb 100644
--- a/test/access/let/matrix.wgsl.expected.wgsl
+++ b/test/access/let/matrix.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
   let v : vec3<f32> = m[1];
diff --git a/test/access/let/vector.spvasm.expected.wgsl b/test/access/let/vector.spvasm.expected.wgsl
index b341f30..77bc6a2 100644
--- a/test/access/let/vector.spvasm.expected.wgsl
+++ b/test/access/let/vector.spvasm.expected.wgsl
@@ -5,7 +5,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/access/let/vector.wgsl b/test/access/let/vector.wgsl
index c768952..3589c6b 100644
--- a/test/access/let/vector.wgsl
+++ b/test/access/let/vector.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let v : vec3<f32> = vec3<f32>(1., 2., 3.);
   let scalar : f32 = v.y;
diff --git a/test/access/let/vector.wgsl.expected.wgsl b/test/access/let/vector.wgsl.expected.wgsl
index b661cf4..d7d7a2d 100644
--- a/test/access/let/vector.wgsl.expected.wgsl
+++ b/test/access/let/vector.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let v : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
   let scalar : f32 = v.y;
diff --git a/test/access/var/matrix.spvasm.expected.wgsl b/test/access/var/matrix.spvasm.expected.wgsl
index 527abf6..d415abd 100644
--- a/test/access/var/matrix.spvasm.expected.wgsl
+++ b/test/access/var/matrix.spvasm.expected.wgsl
@@ -5,7 +5,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/access/var/matrix.wgsl b/test/access/var/matrix.wgsl
index 0bd99dc..d511bd4 100644
--- a/test/access/var/matrix.wgsl
+++ b/test/access/var/matrix.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m : mat3x3<f32>;
   let v : vec3<f32> = m[1];
diff --git a/test/access/var/matrix.wgsl.expected.wgsl b/test/access/var/matrix.wgsl.expected.wgsl
index 0bd99dc..d511bd4 100644
--- a/test/access/var/matrix.wgsl.expected.wgsl
+++ b/test/access/var/matrix.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m : mat3x3<f32>;
   let v : vec3<f32> = m[1];
diff --git a/test/access/var/vector.spvasm.expected.wgsl b/test/access/var/vector.spvasm.expected.wgsl
index 3a3bfdf..310560a 100644
--- a/test/access/var/vector.spvasm.expected.wgsl
+++ b/test/access/var/vector.spvasm.expected.wgsl
@@ -8,7 +8,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/access/var/vector.wgsl b/test/access/var/vector.wgsl
index 8197419..078f82e 100644
--- a/test/access/var/vector.wgsl
+++ b/test/access/var/vector.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : vec3<f32>;
   let scalar : f32 = v.y;
diff --git a/test/access/var/vector.wgsl.expected.wgsl b/test/access/var/vector.wgsl.expected.wgsl
index 8197419..078f82e 100644
--- a/test/access/var/vector.wgsl.expected.wgsl
+++ b/test/access/var/vector.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : vec3<f32>;
   let scalar : f32 = v.y;
diff --git a/test/array/assign_to_function_var.wgsl b/test/array/assign_to_function_var.wgsl
index aeb1ab9..d5ccaa2 100644
--- a/test/array/assign_to_function_var.wgsl
+++ b/test/array/assign_to_function_var.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -6,8 +6,8 @@
 
 var<private> src_private : ArrayType;
 var<workgroup> src_workgroup : ArrayType;
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
 fn ret_arr() -> ArrayType {
   return ArrayType();
diff --git a/test/array/assign_to_function_var.wgsl.expected.wgsl b/test/array/assign_to_function_var.wgsl.expected.wgsl
index 3951d85..0033bea 100644
--- a/test/array/assign_to_function_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_function_var.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -8,9 +8,9 @@
 
 var<workgroup> src_workgroup : ArrayType;
 
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
 
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
 fn ret_arr() -> ArrayType {
   return ArrayType();
diff --git a/test/array/assign_to_private_var.wgsl b/test/array/assign_to_private_var.wgsl
index b8b342c..510da19 100644
--- a/test/array/assign_to_private_var.wgsl
+++ b/test/array/assign_to_private_var.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -6,8 +6,8 @@
 
 var<private> src_private : ArrayType;
 var<workgroup> src_workgroup : ArrayType;
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
 var<private> dst : ArrayType;
 var<private> dst_nested : array<array<array<i32, 2>, 3>, 4>;
diff --git a/test/array/assign_to_private_var.wgsl.expected.wgsl b/test/array/assign_to_private_var.wgsl.expected.wgsl
index 56f7ba5..fd2057b 100644
--- a/test/array/assign_to_private_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_private_var.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -8,9 +8,9 @@
 
 var<workgroup> src_workgroup : ArrayType;
 
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
 
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
 var<private> dst : ArrayType;
 
diff --git a/test/array/assign_to_storage_var.wgsl b/test/array/assign_to_storage_var.wgsl
index 9bc068a..6d001d8 100644
--- a/test/array/assign_to_storage_var.wgsl
+++ b/test/array/assign_to_storage_var.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -10,11 +10,11 @@
 
 var<private> src_private : ArrayType;
 var<workgroup> src_workgroup : ArrayType;
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
-[[group(0), binding(2)]] var<storage, read_write> dst : S;
-[[group(0), binding(3)]] var<storage, read_write> dst_nested : S_nested;
+@group(0) @binding(2) var<storage, read_write> dst : S;
+@group(0) @binding(3) var<storage, read_write> dst_nested : S_nested;
 
 fn ret_arr() -> ArrayType {
   return ArrayType();
diff --git a/test/array/assign_to_storage_var.wgsl.expected.wgsl b/test/array/assign_to_storage_var.wgsl.expected.wgsl
index dce03ab..88902fa 100644
--- a/test/array/assign_to_storage_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_storage_var.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -12,13 +12,13 @@
 
 var<workgroup> src_workgroup : ArrayType;
 
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
 
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
-[[group(0), binding(2)]] var<storage, read_write> dst : S;
+@group(0) @binding(2) var<storage, read_write> dst : S;
 
-[[group(0), binding(3)]] var<storage, read_write> dst_nested : S_nested;
+@group(0) @binding(3) var<storage, read_write> dst_nested : S_nested;
 
 fn ret_arr() -> ArrayType {
   return ArrayType();
diff --git a/test/array/assign_to_workgroup_var.wgsl b/test/array/assign_to_workgroup_var.wgsl
index 225f2f2..9fb94eb 100644
--- a/test/array/assign_to_workgroup_var.wgsl
+++ b/test/array/assign_to_workgroup_var.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -6,8 +6,8 @@
 
 var<private> src_private : ArrayType;
 var<workgroup> src_workgroup : ArrayType;
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
 var<workgroup> dst : ArrayType;
 var<workgroup> dst_nested : array<array<array<i32, 2>, 3>, 4>;
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.wgsl b/test/array/assign_to_workgroup_var.wgsl.expected.wgsl
index a5a27e3..4fecbc8 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-type ArrayType = [[stride(16)]] array<i32, 4>;
+type ArrayType = @stride(16) array<i32, 4>;
 
 struct S {
   arr : ArrayType;
@@ -8,9 +8,9 @@
 
 var<workgroup> src_workgroup : ArrayType;
 
-[[group(0), binding(0)]] var<uniform> src_uniform : S;
+@group(0) @binding(0) var<uniform> src_uniform : S;
 
-[[group(0), binding(1)]] var<storage, read_write> src_storage : S;
+@group(0) @binding(1) var<storage, read_write> src_storage : S;
 
 var<workgroup> dst : ArrayType;
 
diff --git a/test/array/function_parameter.wgsl b/test/array/function_parameter.wgsl
index e50418b..23de855 100644
--- a/test/array/function_parameter.wgsl
+++ b/test/array/function_parameter.wgsl
@@ -10,7 +10,7 @@
   return a[1][2][3];
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let a1 : array<f32, 4> = array<f32, 4>();
   let a2 : array<array<f32, 4>, 3> = array<array<f32, 4>, 3>();
diff --git a/test/array/function_parameter.wgsl.expected.wgsl b/test/array/function_parameter.wgsl.expected.wgsl
index e50418b..23de855 100644
--- a/test/array/function_parameter.wgsl.expected.wgsl
+++ b/test/array/function_parameter.wgsl.expected.wgsl
@@ -10,7 +10,7 @@
   return a[1][2][3];
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let a1 : array<f32, 4> = array<f32, 4>();
   let a2 : array<array<f32, 4>, 3> = array<array<f32, 4>, 3>();
diff --git a/test/array/function_return_type.wgsl b/test/array/function_return_type.wgsl
index 407302f..7491245 100644
--- a/test/array/function_return_type.wgsl
+++ b/test/array/function_return_type.wgsl
@@ -10,7 +10,7 @@
   return array<array<array<f32, 4>, 3>, 2>(f2(), f2());
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let a1 : array<f32, 4> = f1();
   let a2 : array<array<f32, 4>, 3> = f2();
diff --git a/test/array/function_return_type.wgsl.expected.wgsl b/test/array/function_return_type.wgsl.expected.wgsl
index 407302f..7491245 100644
--- a/test/array/function_return_type.wgsl.expected.wgsl
+++ b/test/array/function_return_type.wgsl.expected.wgsl
@@ -10,7 +10,7 @@
   return array<array<array<f32, 4>, 3>, 2>(f2(), f2());
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let a1 : array<f32, 4> = f1();
   let a2 : array<array<f32, 4>, 3> = f2();
diff --git a/test/array/size.wgsl b/test/array/size.wgsl
index c5ebee4..60721db 100644
--- a/test/array/size.wgsl
+++ b/test/array/size.wgsl
@@ -1,7 +1,7 @@
 let slen = 4;
 let ulen = 4u;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var signed_literal : array<f32, 4>;
   var unsigned_literal : array<f32, 4u>;
diff --git a/test/array/size.wgsl.expected.wgsl b/test/array/size.wgsl.expected.wgsl
index f0df1f0..0998407 100644
--- a/test/array/size.wgsl.expected.wgsl
+++ b/test/array/size.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
 
 let ulen = 4u;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var signed_literal : array<f32, 4>;
   var unsigned_literal : array<f32, 4u>;
diff --git a/test/array/type_constructor.wgsl b/test/array/type_constructor.wgsl
index 2870b12..8a07f39 100644
--- a/test/array/type_constructor.wgsl
+++ b/test/array/type_constructor.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x : i32 = 42;
 
diff --git a/test/array/type_constructor.wgsl.expected.wgsl b/test/array/type_constructor.wgsl.expected.wgsl
index 39eaafd..4381ec8 100644
--- a/test/array/type_constructor.wgsl.expected.wgsl
+++ b/test/array/type_constructor.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x : i32 = 42;
   let empty : array<i32, 4> = array<i32, 4>();
diff --git a/test/benchmark/particles.wgsl b/test/benchmark/particles.wgsl
index 4734a37..10bfb00 100644
--- a/test/benchmark/particles.wgsl
+++ b/test/benchmark/particles.wgsl
@@ -17,21 +17,21 @@
   right : vec3<f32>;
   up    : vec3<f32>;
 };
-[[binding(0), group(0)]] var<uniform> render_params : RenderParams;
+@binding(0) @group(0) var<uniform> render_params : RenderParams;
 
 struct VertexInput {
-  [[location(0)]] position : vec3<f32>;
-  [[location(1)]] color    : vec4<f32>;
-  [[location(2)]] quad_pos : vec2<f32>; // -1..+1
+  @location(0) position : vec3<f32>;
+  @location(1) color    : vec4<f32>;
+  @location(2) quad_pos : vec2<f32>; // -1..+1
 };
 
 struct VertexOutput {
-  [[builtin(position)]] position : vec4<f32>;
-  [[location(0)]]       color    : vec4<f32>;
-  [[location(1)]]       quad_pos : vec2<f32>; // -1..+1
+  @builtin(position) position : vec4<f32>;
+  @location(0)       color    : vec4<f32>;
+  @location(1)       quad_pos : vec2<f32>; // -1..+1
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vs_main(in : VertexInput) -> VertexOutput {
   var quad_pos = mat2x3<f32>(render_params.right, render_params.up) * in.quad_pos;
   var position = in.position + quad_pos * 0.01;
@@ -45,8 +45,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 // Fragment shader
 ////////////////////////////////////////////////////////////////////////////////
-[[stage(fragment)]]
-fn fs_main(in : VertexOutput) -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
   var color = in.color;
   // Apply a circular particle alpha mask
   color.a = color.a * max(1.0 - length(in.quad_pos), 0.0);
@@ -72,12 +72,12 @@
   particles : array<Particle>;
 };
 
-[[binding(0), group(0)]] var<uniform> sim_params : SimulationParams;
-[[binding(1), group(0)]] var<storage, read_write> data : Particles;
-[[binding(2), group(0)]] var texture : texture_2d<f32>;
+@binding(0) @group(0) var<uniform> sim_params : SimulationParams;
+@binding(1) @group(0) var<storage, read_write> data : Particles;
+@binding(2) @group(0) var texture : texture_2d<f32>;
 
-[[stage(compute), workgroup_size(64)]]
-fn simulate([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(64)
+fn simulate(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   rand_seed = (sim_params.seed.xy + vec2<f32>(GlobalInvocationID.xy)) * sim_params.seed.zw;
 
   let idx = GlobalInvocationID.x;
@@ -136,11 +136,11 @@
   weights : array<f32>;
 };
 
-[[binding(3), group(0)]] var<uniform> ubo : UBO;
-[[binding(4), group(0)]] var<storage, read> buf_in : Buffer;
-[[binding(5), group(0)]] var<storage, read_write> buf_out : Buffer;
-[[binding(6), group(0)]] var tex_in : texture_2d<f32>;
-[[binding(7), group(0)]] var tex_out : texture_storage_2d<rgba8unorm, write>;
+@binding(3) @group(0) var<uniform> ubo : UBO;
+@binding(4) @group(0) var<storage, read> buf_in : Buffer;
+@binding(5) @group(0) var<storage, read_write> buf_out : Buffer;
+@binding(6) @group(0) var tex_in : texture_2d<f32>;
+@binding(7) @group(0) var tex_out : texture_storage_2d<rgba8unorm, write>;
 
 ////////////////////////////////////////////////////////////////////////////////
 // import_level
@@ -148,8 +148,8 @@
 // Loads the alpha channel from a texel of the source image, and writes it to
 // the buf_out.weights.
 ////////////////////////////////////////////////////////////////////////////////
-[[stage(compute), workgroup_size(64)]]
-fn import_level([[builtin(global_invocation_id)]] coord : vec3<u32>) {
+@stage(compute) @workgroup_size(64)
+fn import_level(@builtin(global_invocation_id) coord : vec3<u32>) {
   _ = &buf_in;
   let offset = coord.x + coord.y * ubo.width;
   buf_out.weights[offset] = textureLoad(tex_in, vec2<i32>(coord.xy), 0).w;
@@ -163,8 +163,8 @@
 // mip level of tex_out. See simulate() in particle.wgsl to understand the
 // probability logic.
 ////////////////////////////////////////////////////////////////////////////////
-[[stage(compute), workgroup_size(64)]]
-fn export_level([[builtin(global_invocation_id)]] coord : vec3<u32>) {
+@stage(compute) @workgroup_size(64)
+fn export_level(@builtin(global_invocation_id) coord : vec3<u32>) {
   if (all(coord.xy < vec2<u32>(textureDimensions(tex_out)))) {
     let dst_offset = coord.x    + coord.y    * ubo.width;
     let src_offset = coord.x*2u + coord.y*2u * ubo.width;
diff --git a/test/benchmark/particles.wgsl.expected.wgsl b/test/benchmark/particles.wgsl.expected.wgsl
index 0ab3f50..ad07dc5 100644
--- a/test/benchmark/particles.wgsl.expected.wgsl
+++ b/test/benchmark/particles.wgsl.expected.wgsl
@@ -12,27 +12,27 @@
   up : vec3<f32>;
 }
 
-[[binding(0), group(0)]] var<uniform> render_params : RenderParams;
+@binding(0) @group(0) var<uniform> render_params : RenderParams;
 
 struct VertexInput {
-  [[location(0)]]
+  @location(0)
   position : vec3<f32>;
-  [[location(1)]]
+  @location(1)
   color : vec4<f32>;
-  [[location(2)]]
+  @location(2)
   quad_pos : vec2<f32>;
 }
 
 struct VertexOutput {
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   color : vec4<f32>;
-  [[location(1)]]
+  @location(1)
   quad_pos : vec2<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vs_main(in : VertexInput) -> VertexOutput {
   var quad_pos = (mat2x3<f32>(render_params.right, render_params.up) * in.quad_pos);
   var position = (in.position + (quad_pos * 0.01));
@@ -43,8 +43,8 @@
   return out;
 }
 
-[[stage(fragment)]]
-fn fs_main(in : VertexOutput) -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
   var color = in.color;
   color.a = (color.a * max((1.0 - length(in.quad_pos)), 0.0));
   return color;
@@ -66,14 +66,14 @@
   particles : array<Particle>;
 }
 
-[[binding(0), group(0)]] var<uniform> sim_params : SimulationParams;
+@binding(0) @group(0) var<uniform> sim_params : SimulationParams;
 
-[[binding(1), group(0)]] var<storage, read_write> data : Particles;
+@binding(1) @group(0) var<storage, read_write> data : Particles;
 
-[[binding(2), group(0)]] var texture : texture_2d<f32>;
+@binding(2) @group(0) var texture : texture_2d<f32>;
 
-[[stage(compute), workgroup_size(64)]]
-fn simulate([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(64)
+fn simulate(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   rand_seed = ((sim_params.seed.xy + vec2<f32>(GlobalInvocationID.xy)) * sim_params.seed.zw);
   let idx = GlobalInvocationID.x;
   var particle = data.particles[idx];
@@ -110,25 +110,25 @@
   weights : array<f32>;
 }
 
-[[binding(3), group(0)]] var<uniform> ubo : UBO;
+@binding(3) @group(0) var<uniform> ubo : UBO;
 
-[[binding(4), group(0)]] var<storage, read> buf_in : Buffer;
+@binding(4) @group(0) var<storage, read> buf_in : Buffer;
 
-[[binding(5), group(0)]] var<storage, read_write> buf_out : Buffer;
+@binding(5) @group(0) var<storage, read_write> buf_out : Buffer;
 
-[[binding(6), group(0)]] var tex_in : texture_2d<f32>;
+@binding(6) @group(0) var tex_in : texture_2d<f32>;
 
-[[binding(7), group(0)]] var tex_out : texture_storage_2d<rgba8unorm, write>;
+@binding(7) @group(0) var tex_out : texture_storage_2d<rgba8unorm, write>;
 
-[[stage(compute), workgroup_size(64)]]
-fn import_level([[builtin(global_invocation_id)]] coord : vec3<u32>) {
+@stage(compute) @workgroup_size(64)
+fn import_level(@builtin(global_invocation_id) coord : vec3<u32>) {
   _ = &(buf_in);
   let offset = (coord.x + (coord.y * ubo.width));
   buf_out.weights[offset] = textureLoad(tex_in, vec2<i32>(coord.xy), 0).w;
 }
 
-[[stage(compute), workgroup_size(64)]]
-fn export_level([[builtin(global_invocation_id)]] coord : vec3<u32>) {
+@stage(compute) @workgroup_size(64)
+fn export_level(@builtin(global_invocation_id) coord : vec3<u32>) {
   if (all((coord.xy < vec2<u32>(textureDimensions(tex_out))))) {
     let dst_offset = (coord.x + (coord.y * ubo.width));
     let src_offset = ((coord.x * 2u) + ((coord.y * 2u) * ubo.width));
diff --git a/test/benchmark/simple_compute.wgsl b/test/benchmark/simple_compute.wgsl
index f5b883a..605bfee 100644
--- a/test/benchmark/simple_compute.wgsl
+++ b/test/benchmark/simple_compute.wgsl
@@ -2,9 +2,9 @@
   data : array<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> buffer : SB;
+@group(0) @binding(0) var<storage, read_write> buffer : SB;
 
-[[stage(compute), workgroup_size(1, 2, 3)]]
-fn main([[builtin(global_invocation_id)]] id : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 2, 3)
+fn main(@builtin(global_invocation_id) id : vec3<u32>) {
   buffer.data[id.x] = buffer.data[id.x] + 1;
 }
diff --git a/test/benchmark/simple_compute.wgsl.expected.wgsl b/test/benchmark/simple_compute.wgsl.expected.wgsl
index a83b28f..458c08c 100644
--- a/test/benchmark/simple_compute.wgsl.expected.wgsl
+++ b/test/benchmark/simple_compute.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   data : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> buffer : SB;
+@group(0) @binding(0) var<storage, read_write> buffer : SB;
 
-[[stage(compute), workgroup_size(1, 2, 3)]]
-fn main([[builtin(global_invocation_id)]] id : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 2, 3)
+fn main(@builtin(global_invocation_id) id : vec3<u32>) {
   buffer.data[id.x] = (buffer.data[id.x] + 1);
 }
diff --git a/test/benchmark/simple_fragment.wgsl b/test/benchmark/simple_fragment.wgsl
index bb5ed94..3fe67bf 100644
--- a/test/benchmark/simple_fragment.wgsl
+++ b/test/benchmark/simple_fragment.wgsl
@@ -1,12 +1,12 @@
 struct Input {
-  [[location(0)]] color: vec4<f32>;
+  @location(0) color: vec4<f32>;
 };
 
 struct Output {
-  [[location(0)]] color: vec4<f32>;
+  @location(0) color: vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(in : Input) -> Output {
   return Output(in.color);
 }
diff --git a/test/benchmark/simple_fragment.wgsl.expected.wgsl b/test/benchmark/simple_fragment.wgsl.expected.wgsl
index 7236de2..19b9e99 100644
--- a/test/benchmark/simple_fragment.wgsl.expected.wgsl
+++ b/test/benchmark/simple_fragment.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Input {
-  [[location(0)]]
+  @location(0)
   color : vec4<f32>;
 }
 
 struct Output {
-  [[location(0)]]
+  @location(0)
   color : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(in : Input) -> Output {
   return Output(in.color);
 }
diff --git a/test/benchmark/simple_vertex.wgsl b/test/benchmark/simple_vertex.wgsl
index 8f9a07b..fb13fe2 100644
--- a/test/benchmark/simple_vertex.wgsl
+++ b/test/benchmark/simple_vertex.wgsl
@@ -1,12 +1,12 @@
 struct Input {
-  [[location(0)]] position: vec4<f32>;
+  @location(0) position: vec4<f32>;
 };
 
 struct Output {
-  [[builtin(position)]] position : vec4<f32>;
+  @builtin(position) position : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main(in : Input) -> Output {
   return Output(in.position);
 }
diff --git a/test/benchmark/simple_vertex.wgsl.expected.wgsl b/test/benchmark/simple_vertex.wgsl.expected.wgsl
index fdce23e..41368eb 100644
--- a/test/benchmark/simple_vertex.wgsl.expected.wgsl
+++ b/test/benchmark/simple_vertex.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Input {
-  [[location(0)]]
+  @location(0)
   position : vec4<f32>;
 }
 
 struct Output {
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main(in : Input) -> Output {
   return Output(in.position);
 }
diff --git a/test/buffer/storage/dynamic_index/read.wgsl b/test/buffer/storage/dynamic_index/read.wgsl
index 633b1be..94c2c1f 100644
--- a/test/buffer/storage/dynamic_index/read.wgsl
+++ b/test/buffer/storage/dynamic_index/read.wgsl
@@ -7,17 +7,17 @@
     f : f32;
     g : mat2x3<f32>;
     h : mat3x2<f32>;
-    i : [[stride(16)]] array<vec4<i32>, 4>;
+    i : @stride(16) array<vec4<i32>, 4>;
 };
 
 struct S {
     arr : array<Inner>;
 };
 
-[[binding(0), group(0)]] var<storage, read> s : S;
+@binding(0) @group(0) var<storage, read> s : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
     let a = s.arr[idx].a;
     let b = s.arr[idx].b;
     let c = s.arr[idx].c;
diff --git a/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl b/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl
index bd24ab0..fd0c451 100644
--- a/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl
+++ b/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl
@@ -7,17 +7,17 @@
   f : f32;
   g : mat2x3<f32>;
   h : mat3x2<f32>;
-  i : [[stride(16)]] array<vec4<i32>, 4>;
+  i : @stride(16) array<vec4<i32>, 4>;
 }
 
 struct S {
   arr : array<Inner>;
 }
 
-[[binding(0), group(0)]] var<storage, read> s : S;
+@binding(0) @group(0) var<storage, read> s : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
   let a = s.arr[idx].a;
   let b = s.arr[idx].b;
   let c = s.arr[idx].c;
diff --git a/test/buffer/storage/dynamic_index/write.wgsl b/test/buffer/storage/dynamic_index/write.wgsl
index 836c018f..3770015 100644
--- a/test/buffer/storage/dynamic_index/write.wgsl
+++ b/test/buffer/storage/dynamic_index/write.wgsl
@@ -7,17 +7,17 @@
     f : f32;
     g : mat2x3<f32>;
     h : mat3x2<f32>;
-    i : [[stride(16)]] array<vec4<i32>, 4>;
+    i : @stride(16) array<vec4<i32>, 4>;
 };
 
 struct S {
     arr : array<Inner>;
 };
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
     s.arr[idx].a = vec3<i32>();
     s.arr[idx].b = i32();
     s.arr[idx].c = vec3<u32>();
@@ -26,5 +26,5 @@
     s.arr[idx].f = f32();
     s.arr[idx].g = mat2x3<f32>();
     s.arr[idx].h = mat3x2<f32>();
-    s.arr[idx].i = [[stride(16)]] array<vec4<i32>, 4>();
+    s.arr[idx].i = @stride(16) array<vec4<i32>, 4>();
 }
diff --git a/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl b/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl
index b015519..d51db21 100644
--- a/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl
+++ b/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl
@@ -7,17 +7,17 @@
   f : f32;
   g : mat2x3<f32>;
   h : mat3x2<f32>;
-  i : [[stride(16)]] array<vec4<i32>, 4>;
+  i : @stride(16) array<vec4<i32>, 4>;
 }
 
 struct S {
   arr : array<Inner>;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
   s.arr[idx].a = vec3<i32>();
   s.arr[idx].b = i32();
   s.arr[idx].c = vec3<u32>();
@@ -26,5 +26,5 @@
   s.arr[idx].f = f32();
   s.arr[idx].g = mat2x3<f32>();
   s.arr[idx].h = mat3x2<f32>();
-  s.arr[idx].i = [[stride(16)]] array<vec4<i32>, 4>();
+  s.arr[idx].i = @stride(16) array<vec4<i32>, 4>();
 }
diff --git a/test/buffer/storage/static_index/read.wgsl b/test/buffer/storage/static_index/read.wgsl
index c0824b3..773fbbb 100644
--- a/test/buffer/storage/static_index/read.wgsl
+++ b/test/buffer/storage/static_index/read.wgsl
@@ -12,12 +12,12 @@
     g : mat2x3<f32>;
     h : mat3x2<f32>;
     i : Inner;
-    j : [[stride(16)]] array<Inner, 4>;
+    j : @stride(16) array<Inner, 4>;
 };
 
-[[binding(0), group(0)]] var<storage, read> s : S;
+@binding(0) @group(0) var<storage, read> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let a = s.a;
     let b = s.b;
diff --git a/test/buffer/storage/static_index/read.wgsl.expected.wgsl b/test/buffer/storage/static_index/read.wgsl.expected.wgsl
index 56187c5..3413a96 100644
--- a/test/buffer/storage/static_index/read.wgsl.expected.wgsl
+++ b/test/buffer/storage/static_index/read.wgsl.expected.wgsl
@@ -12,12 +12,12 @@
   g : mat2x3<f32>;
   h : mat3x2<f32>;
   i : Inner;
-  j : [[stride(16)]] array<Inner, 4>;
+  j : @stride(16) array<Inner, 4>;
 }
 
-[[binding(0), group(0)]] var<storage, read> s : S;
+@binding(0) @group(0) var<storage, read> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let a = s.a;
   let b = s.b;
diff --git a/test/buffer/storage/static_index/write.wgsl b/test/buffer/storage/static_index/write.wgsl
index 7b4affb..ff18cbc 100644
--- a/test/buffer/storage/static_index/write.wgsl
+++ b/test/buffer/storage/static_index/write.wgsl
@@ -12,12 +12,12 @@
     g : mat2x3<f32>;
     h : mat3x2<f32>;
     i : Inner;
-    j : [[stride(16)]] array<Inner, 4>;
+    j : @stride(16) array<Inner, 4>;
 };
 
-[[binding(0), group(0)]] var<storage, write> s : S;
+@binding(0) @group(0) var<storage, write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     s.a = vec3<i32>();
     s.b = i32();
@@ -28,5 +28,5 @@
     s.g = mat2x3<f32>();
     s.h = mat3x2<f32>();
     s.i = Inner();
-    s.j = [[stride(16)]] array<Inner, 4>();
+    s.j = @stride(16) array<Inner, 4>();
 }
diff --git a/test/buffer/storage/static_index/write.wgsl.expected.wgsl b/test/buffer/storage/static_index/write.wgsl.expected.wgsl
index 46cdde8..595efce 100644
--- a/test/buffer/storage/static_index/write.wgsl.expected.wgsl
+++ b/test/buffer/storage/static_index/write.wgsl.expected.wgsl
@@ -12,12 +12,12 @@
   g : mat2x3<f32>;
   h : mat3x2<f32>;
   i : Inner;
-  j : [[stride(16)]] array<Inner, 4>;
+  j : @stride(16) array<Inner, 4>;
 }
 
-[[binding(0), group(0)]] var<storage, write> s : S;
+@binding(0) @group(0) var<storage, write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   s.a = vec3<i32>();
   s.b = i32();
@@ -28,5 +28,5 @@
   s.g = mat2x3<f32>();
   s.h = mat3x2<f32>();
   s.i = Inner();
-  s.j = [[stride(16)]] array<Inner, 4>();
+  s.j = @stride(16) array<Inner, 4>();
 }
diff --git a/test/buffer/storage/types/array.wgsl b/test/buffer/storage/types/array.wgsl
index 6105a26..ae79369 100644
--- a/test/buffer/storage/types/array.wgsl
+++ b/test/buffer/storage/types/array.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : array<f32, 4>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : array<f32, 4>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/array.wgsl.expected.wgsl b/test/buffer/storage/types/array.wgsl.expected.wgsl
index 0aaacae..7cfa5a3 100644
--- a/test/buffer/storage/types/array.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/array.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : array<f32, 4>;
+@group(0) @binding(0) var<storage, read> in : array<f32, 4>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : array<f32, 4>;
+@group(0) @binding(1) var<storage, read_write> out : array<f32, 4>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/f32.wgsl b/test/buffer/storage/types/f32.wgsl
index d66cdb0..d8d60af 100644
--- a/test/buffer/storage/types/f32.wgsl
+++ b/test/buffer/storage/types/f32.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : f32;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/f32.wgsl.expected.wgsl b/test/buffer/storage/types/f32.wgsl.expected.wgsl
index a385a75..fc61aa9 100644
--- a/test/buffer/storage/types/f32.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/f32.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : f32;
+@group(0) @binding(0) var<storage, read> in : f32;
 
-[[group(0), binding(1)]] var<storage, read_write> out : f32;
+@group(0) @binding(1) var<storage, read_write> out : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/i32.wgsl b/test/buffer/storage/types/i32.wgsl
index 2ffd35f..fa63f1d 100644
--- a/test/buffer/storage/types/i32.wgsl
+++ b/test/buffer/storage/types/i32.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : i32;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/i32.wgsl.expected.wgsl b/test/buffer/storage/types/i32.wgsl.expected.wgsl
index 3424f2e..f4b6b78 100644
--- a/test/buffer/storage/types/i32.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/i32.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : i32;
+@group(0) @binding(0) var<storage, read> in : i32;
 
-[[group(0), binding(1)]] var<storage, read_write> out : i32;
+@group(0) @binding(1) var<storage, read_write> out : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat2x2.wgsl b/test/buffer/storage/types/mat2x2.wgsl
index 60ff548..0fece18 100644
--- a/test/buffer/storage/types/mat2x2.wgsl
+++ b/test/buffer/storage/types/mat2x2.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : mat2x2<f32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : mat2x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat2x2.wgsl.expected.wgsl b/test/buffer/storage/types/mat2x2.wgsl.expected.wgsl
index 8d2cbae..5d3e650 100644
--- a/test/buffer/storage/types/mat2x2.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/mat2x2.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : mat2x2<f32>;
+@group(0) @binding(0) var<storage, read> in : mat2x2<f32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : mat2x2<f32>;
+@group(0) @binding(1) var<storage, read_write> out : mat2x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat2x3.wgsl b/test/buffer/storage/types/mat2x3.wgsl
index 151db83..7d64f7b 100644
--- a/test/buffer/storage/types/mat2x3.wgsl
+++ b/test/buffer/storage/types/mat2x3.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : mat2x3<f32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat2x3.wgsl.expected.wgsl b/test/buffer/storage/types/mat2x3.wgsl.expected.wgsl
index ab3a5fd..48eda48 100644
--- a/test/buffer/storage/types/mat2x3.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/mat2x3.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : mat2x3<f32>;
+@group(0) @binding(0) var<storage, read> in : mat2x3<f32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : mat2x3<f32>;
+@group(0) @binding(1) var<storage, read_write> out : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat3x2.wgsl b/test/buffer/storage/types/mat3x2.wgsl
index d77ac81..e3f972f 100644
--- a/test/buffer/storage/types/mat3x2.wgsl
+++ b/test/buffer/storage/types/mat3x2.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : mat3x2<f32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : mat3x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat3x2.wgsl.expected.wgsl b/test/buffer/storage/types/mat3x2.wgsl.expected.wgsl
index 4c87f4a..d5db436 100644
--- a/test/buffer/storage/types/mat3x2.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/mat3x2.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : mat3x2<f32>;
+@group(0) @binding(0) var<storage, read> in : mat3x2<f32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : mat3x2<f32>;
+@group(0) @binding(1) var<storage, read_write> out : mat3x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat4x4.wgsl b/test/buffer/storage/types/mat4x4.wgsl
index bf18a25..673d9d3 100644
--- a/test/buffer/storage/types/mat4x4.wgsl
+++ b/test/buffer/storage/types/mat4x4.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : mat4x4<f32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : mat4x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/mat4x4.wgsl.expected.wgsl b/test/buffer/storage/types/mat4x4.wgsl.expected.wgsl
index 7c1ebe9..402743f 100644
--- a/test/buffer/storage/types/mat4x4.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/mat4x4.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : mat4x4<f32>;
+@group(0) @binding(0) var<storage, read> in : mat4x4<f32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : mat4x4<f32>;
+@group(0) @binding(1) var<storage, read_write> out : mat4x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/runtime_array.wgsl b/test/buffer/storage/types/runtime_array.wgsl
index f403fd3..083ea11 100644
--- a/test/buffer/storage/types/runtime_array.wgsl
+++ b/test/buffer/storage/types/runtime_array.wgsl
@@ -2,13 +2,13 @@
   f : f32;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : array<S>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : array<S>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out[0] = in[0];
 }
diff --git a/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl b/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl
index 2aca9cd..4b87ea6 100644
--- a/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl
@@ -2,11 +2,11 @@
   f : f32;
 }
 
-[[group(0), binding(0)]] var<storage, read> in : array<S>;
+@group(0) @binding(0) var<storage, read> in : array<S>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : array<S>;
+@group(0) @binding(1) var<storage, read_write> out : array<S>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out[0] = in[0];
 }
diff --git a/test/buffer/storage/types/struct.wgsl b/test/buffer/storage/types/struct.wgsl
index 42acfbc..993b052 100644
--- a/test/buffer/storage/types/struct.wgsl
+++ b/test/buffer/storage/types/struct.wgsl
@@ -5,13 +5,13 @@
   inner : Inner;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : S;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/struct.wgsl.expected.wgsl b/test/buffer/storage/types/struct.wgsl.expected.wgsl
index dd840d4..59d3bc9 100644
--- a/test/buffer/storage/types/struct.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/struct.wgsl.expected.wgsl
@@ -6,11 +6,11 @@
   inner : Inner;
 }
 
-[[group(0), binding(0)]] var<storage, read> in : S;
+@group(0) @binding(0) var<storage, read> in : S;
 
-[[group(0), binding(1)]] var<storage, read_write> out : S;
+@group(0) @binding(1) var<storage, read_write> out : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/u32.wgsl b/test/buffer/storage/types/u32.wgsl
index 4664d29..0b87510 100644
--- a/test/buffer/storage/types/u32.wgsl
+++ b/test/buffer/storage/types/u32.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : u32;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/u32.wgsl.expected.wgsl b/test/buffer/storage/types/u32.wgsl.expected.wgsl
index 46dc9d3..2cebf5e 100644
--- a/test/buffer/storage/types/u32.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/u32.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : u32;
+@group(0) @binding(0) var<storage, read> in : u32;
 
-[[group(0), binding(1)]] var<storage, read_write> out : u32;
+@group(0) @binding(1) var<storage, read_write> out : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/vec2.wgsl b/test/buffer/storage/types/vec2.wgsl
index 9841fd4..d1466d5 100644
--- a/test/buffer/storage/types/vec2.wgsl
+++ b/test/buffer/storage/types/vec2.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : vec2<i32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : vec2<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/vec2.wgsl.expected.wgsl b/test/buffer/storage/types/vec2.wgsl.expected.wgsl
index a945b32..806600b 100644
--- a/test/buffer/storage/types/vec2.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/vec2.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : vec2<i32>;
+@group(0) @binding(0) var<storage, read> in : vec2<i32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : vec2<i32>;
+@group(0) @binding(1) var<storage, read_write> out : vec2<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/vec3.wgsl b/test/buffer/storage/types/vec3.wgsl
index 5335059..38e25d0 100644
--- a/test/buffer/storage/types/vec3.wgsl
+++ b/test/buffer/storage/types/vec3.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : vec3<u32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : vec3<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/vec3.wgsl.expected.wgsl b/test/buffer/storage/types/vec3.wgsl.expected.wgsl
index 71377b0..a3fcf3a 100644
--- a/test/buffer/storage/types/vec3.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/vec3.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : vec3<u32>;
+@group(0) @binding(0) var<storage, read> in : vec3<u32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : vec3<u32>;
+@group(0) @binding(1) var<storage, read_write> out : vec3<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/vec4.wgsl b/test/buffer/storage/types/vec4.wgsl
index 494a89a..b9bf279 100644
--- a/test/buffer/storage/types/vec4.wgsl
+++ b/test/buffer/storage/types/vec4.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read> in : vec4<f32>;
 
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read_write> out : vec4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/storage/types/vec4.wgsl.expected.wgsl b/test/buffer/storage/types/vec4.wgsl.expected.wgsl
index 7b278bd..22065c7 100644
--- a/test/buffer/storage/types/vec4.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/vec4.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var<storage, read> in : vec4<f32>;
+@group(0) @binding(0) var<storage, read> in : vec4<f32>;
 
-[[group(0), binding(1)]] var<storage, read_write> out : vec4<f32>;
+@group(0) @binding(1) var<storage, read_write> out : vec4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   out = in;
 }
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl b/test/buffer/uniform/dynamic_index/read.wgsl
index 2e79833..3e9142b 100644
--- a/test/buffer/uniform/dynamic_index/read.wgsl
+++ b/test/buffer/uniform/dynamic_index/read.wgsl
@@ -8,18 +8,18 @@
     g : vec2<i32>;
     h : vec2<i32>;
     i : mat2x3<f32>;
-    [[align(16)]] j : mat3x2<f32>;
-    [[align(16)]] k : [[stride(16)]] array<vec4<i32>, 4>;
+    @align(16) j : mat3x2<f32>;
+    @align(16) k : @stride(16) array<vec4<i32>, 4>;
 };
 
 struct S {
     arr : array<Inner, 8>;
 };
 
-[[binding(0), group(0)]] var<uniform> s : S;
+@binding(0) @group(0) var<uniform> s : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
     let a = s.arr[idx].a;
     let b = s.arr[idx].b;
     let c = s.arr[idx].c;
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl b/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl
index 0dc8fdf..1bee626 100644
--- a/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl
+++ b/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl
@@ -8,20 +8,20 @@
   g : vec2<i32>;
   h : vec2<i32>;
   i : mat2x3<f32>;
-  [[align(16)]]
+  @align(16)
   j : mat3x2<f32>;
-  [[align(16)]]
-  k : [[stride(16)]] array<vec4<i32>, 4>;
+  @align(16)
+  k : @stride(16) array<vec4<i32>, 4>;
 }
 
 struct S {
   arr : array<Inner, 8>;
 }
 
-[[binding(0), group(0)]] var<uniform> s : S;
+@binding(0) @group(0) var<uniform> s : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
   let a = s.arr[idx].a;
   let b = s.arr[idx].b;
   let c = s.arr[idx].c;
diff --git a/test/buffer/uniform/static_index/read.wgsl b/test/buffer/uniform/static_index/read.wgsl
index a735ccf..e1d10e8 100644
--- a/test/buffer/uniform/static_index/read.wgsl
+++ b/test/buffer/uniform/static_index/read.wgsl
@@ -13,13 +13,13 @@
     h : vec2<i32>;
     i : mat2x3<f32>;
     j : mat3x2<f32>;
-    [[align(16)]] k : Inner;
-    [[align(16)]] l : [[stride(16)]] array<Inner, 4>;
+    @align(16) k : Inner;
+    @align(16) l : @stride(16) array<Inner, 4>;
 };
 
-[[binding(0), group(0)]] var<uniform> s : S;
+@binding(0) @group(0) var<uniform> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let a = s.a;
     let b = s.b;
diff --git a/test/buffer/uniform/static_index/read.wgsl.expected.wgsl b/test/buffer/uniform/static_index/read.wgsl.expected.wgsl
index f43ae3b..b790c19 100644
--- a/test/buffer/uniform/static_index/read.wgsl.expected.wgsl
+++ b/test/buffer/uniform/static_index/read.wgsl.expected.wgsl
@@ -13,15 +13,15 @@
   h : vec2<i32>;
   i : mat2x3<f32>;
   j : mat3x2<f32>;
-  [[align(16)]]
+  @align(16)
   k : Inner;
-  [[align(16)]]
-  l : [[stride(16)]] array<Inner, 4>;
+  @align(16)
+  l : @stride(16) array<Inner, 4>;
 }
 
-[[binding(0), group(0)]] var<uniform> s : S;
+@binding(0) @group(0) var<uniform> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let a = s.a;
   let b = s.b;
diff --git a/test/buffer/uniform/types/array.wgsl b/test/buffer/uniform/types/array.wgsl
index 7151b53..01a7138 100644
--- a/test/buffer/uniform/types/array.wgsl
+++ b/test/buffer/uniform/types/array.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : array<vec4<f32>, 4>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/array.wgsl.expected.wgsl b/test/buffer/uniform/types/array.wgsl.expected.wgsl
index 3cfa21e..43d91c8 100644
--- a/test/buffer/uniform/types/array.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : array<vec4<f32>, 4>;
+@group(0) @binding(0) var<uniform> u : array<vec4<f32>, 4>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/f32.wgsl b/test/buffer/uniform/types/f32.wgsl
index 1f3fbfa..bd785bb 100644
--- a/test/buffer/uniform/types/f32.wgsl
+++ b/test/buffer/uniform/types/f32.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/f32.wgsl.expected.wgsl b/test/buffer/uniform/types/f32.wgsl.expected.wgsl
index 6bd2751..ef2fa27 100644
--- a/test/buffer/uniform/types/f32.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : f32;
+@group(0) @binding(0) var<uniform> u : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/i32.wgsl b/test/buffer/uniform/types/i32.wgsl
index ca165b4..9d6e5d4 100644
--- a/test/buffer/uniform/types/i32.wgsl
+++ b/test/buffer/uniform/types/i32.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/i32.wgsl.expected.wgsl b/test/buffer/uniform/types/i32.wgsl.expected.wgsl
index 0cf7b04..794f018 100644
--- a/test/buffer/uniform/types/i32.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : i32;
+@group(0) @binding(0) var<uniform> u : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat2x2.wgsl b/test/buffer/uniform/types/mat2x2.wgsl
index d1cc3d3..5522acc 100644
--- a/test/buffer/uniform/types/mat2x2.wgsl
+++ b/test/buffer/uniform/types/mat2x2.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : mat2x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat2x2.wgsl.expected.wgsl b/test/buffer/uniform/types/mat2x2.wgsl.expected.wgsl
index 8c42684..49ce708 100644
--- a/test/buffer/uniform/types/mat2x2.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/mat2x2.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : mat2x2<f32>;
+@group(0) @binding(0) var<uniform> u : mat2x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat2x3.wgsl b/test/buffer/uniform/types/mat2x3.wgsl
index 0fb978d..5179d28 100644
--- a/test/buffer/uniform/types/mat2x3.wgsl
+++ b/test/buffer/uniform/types/mat2x3.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat2x3.wgsl.expected.wgsl b/test/buffer/uniform/types/mat2x3.wgsl.expected.wgsl
index 5a74e94..e7f0073 100644
--- a/test/buffer/uniform/types/mat2x3.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/mat2x3.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : mat2x3<f32>;
+@group(0) @binding(0) var<uniform> u : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat3x2.wgsl b/test/buffer/uniform/types/mat3x2.wgsl
index 59b1b80..0a308b4 100644
--- a/test/buffer/uniform/types/mat3x2.wgsl
+++ b/test/buffer/uniform/types/mat3x2.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : mat3x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat3x2.wgsl.expected.wgsl b/test/buffer/uniform/types/mat3x2.wgsl.expected.wgsl
index 5f16f76..874cf97 100644
--- a/test/buffer/uniform/types/mat3x2.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/mat3x2.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : mat3x2<f32>;
+@group(0) @binding(0) var<uniform> u : mat3x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat4x4.wgsl b/test/buffer/uniform/types/mat4x4.wgsl
index 7d2a57b..a9bf3ca 100644
--- a/test/buffer/uniform/types/mat4x4.wgsl
+++ b/test/buffer/uniform/types/mat4x4.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : mat4x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/mat4x4.wgsl.expected.wgsl b/test/buffer/uniform/types/mat4x4.wgsl.expected.wgsl
index a1188d4..aa2f714 100644
--- a/test/buffer/uniform/types/mat4x4.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/mat4x4.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : mat4x4<f32>;
+@group(0) @binding(0) var<uniform> u : mat4x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/struct.wgsl b/test/buffer/uniform/types/struct.wgsl
index 135bcab..2c6547c 100644
--- a/test/buffer/uniform/types/struct.wgsl
+++ b/test/buffer/uniform/types/struct.wgsl
@@ -5,10 +5,10 @@
   inner : Inner;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/struct.wgsl.expected.wgsl b/test/buffer/uniform/types/struct.wgsl.expected.wgsl
index 0e74bf8..f564832 100644
--- a/test/buffer/uniform/types/struct.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/struct.wgsl.expected.wgsl
@@ -6,9 +6,9 @@
   inner : Inner;
 }
 
-[[group(0), binding(0)]] var<uniform> u : S;
+@group(0) @binding(0) var<uniform> u : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/u32.wgsl b/test/buffer/uniform/types/u32.wgsl
index a1c80a3..3afc920 100644
--- a/test/buffer/uniform/types/u32.wgsl
+++ b/test/buffer/uniform/types/u32.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/u32.wgsl.expected.wgsl b/test/buffer/uniform/types/u32.wgsl.expected.wgsl
index 6751a05..d5d7e7f 100644
--- a/test/buffer/uniform/types/u32.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : u32;
+@group(0) @binding(0) var<uniform> u : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/vec2.wgsl b/test/buffer/uniform/types/vec2.wgsl
index 8f2debe..89e8889 100644
--- a/test/buffer/uniform/types/vec2.wgsl
+++ b/test/buffer/uniform/types/vec2.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : vec2<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/vec2.wgsl.expected.wgsl b/test/buffer/uniform/types/vec2.wgsl.expected.wgsl
index 61695c1..44de55f 100644
--- a/test/buffer/uniform/types/vec2.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/vec2.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : vec2<i32>;
+@group(0) @binding(0) var<uniform> u : vec2<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/vec3.wgsl b/test/buffer/uniform/types/vec3.wgsl
index 012d269..e571c47 100644
--- a/test/buffer/uniform/types/vec3.wgsl
+++ b/test/buffer/uniform/types/vec3.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : vec3<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/vec3.wgsl.expected.wgsl b/test/buffer/uniform/types/vec3.wgsl.expected.wgsl
index d8d99e8..be459f7 100644
--- a/test/buffer/uniform/types/vec3.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/vec3.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : vec3<u32>;
+@group(0) @binding(0) var<uniform> u : vec3<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/vec4.wgsl b/test/buffer/uniform/types/vec4.wgsl
index 24d63f0..f15e971 100644
--- a/test/buffer/uniform/types/vec4.wgsl
+++ b/test/buffer/uniform/types/vec4.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> u : vec4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/buffer/uniform/types/vec4.wgsl.expected.wgsl b/test/buffer/uniform/types/vec4.wgsl.expected.wgsl
index fe83de0..41a4f37 100644
--- a/test/buffer/uniform/types/vec4.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/vec4.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<uniform> u : vec4<f32>;
+@group(0) @binding(0) var<uniform> u : vec4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x = u;
 }
diff --git a/test/bug/chromium/1251009.wgsl b/test/bug/chromium/1251009.wgsl
index 4abe77e..7a057c0 100644
--- a/test/bug/chromium/1251009.wgsl
+++ b/test/bug/chromium/1251009.wgsl
@@ -1,19 +1,19 @@
 struct VertexInputs0 {
-  [[builtin(vertex_index)]] vertex_index : u32;
-  [[location(0)]] loc0 : i32;
+  @builtin(vertex_index) vertex_index : u32;
+  @location(0) loc0 : i32;
 };
 struct VertexInputs1 {
-  [[location(2)]] loc1 : u32;
-  [[location(3)]] loc3 : vec4<f32>;
+  @location(2) loc1 : u32;
+  @location(3) loc3 : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main(
   inputs0 : VertexInputs0,
-  [[location(1)]] loc1 : u32,
-  [[builtin(instance_index)]] instance_index : u32,
+  @location(1) loc1 : u32,
+  @builtin(instance_index) instance_index : u32,
   inputs1 : VertexInputs1,
-) -> [[builtin(position)]] vec4<f32> {
+) -> @builtin(position) vec4<f32> {
   let foo : u32 = inputs0.vertex_index + instance_index;
   return vec4<f32>();
 }
diff --git a/test/bug/chromium/1251009.wgsl.expected.wgsl b/test/bug/chromium/1251009.wgsl.expected.wgsl
index c82715d..f761f69 100644
--- a/test/bug/chromium/1251009.wgsl.expected.wgsl
+++ b/test/bug/chromium/1251009.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct VertexInputs0 {
-  [[builtin(vertex_index)]]
+  @builtin(vertex_index)
   vertex_index : u32;
-  [[location(0)]]
+  @location(0)
   loc0 : i32;
 }
 
 struct VertexInputs1 {
-  [[location(2)]]
+  @location(2)
   loc1 : u32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
 }
 
-[[stage(vertex)]]
-fn main(inputs0 : VertexInputs0, [[location(1)]] loc1 : u32, [[builtin(instance_index)]] instance_index : u32, inputs1 : VertexInputs1) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(inputs0 : VertexInputs0, @location(1) loc1 : u32, @builtin(instance_index) instance_index : u32, inputs1 : VertexInputs1) -> @builtin(position) vec4<f32> {
   let foo : u32 = (inputs0.vertex_index + instance_index);
   return vec4<f32>();
 }
diff --git a/test/bug/chromium/1273230.wgsl b/test/bug/chromium/1273230.wgsl
index a2152ff..90ed840 100644
--- a/test/bug/chromium/1273230.wgsl
+++ b/test/bug/chromium/1273230.wgsl
@@ -1,6 +1,6 @@
 // /fallthroUgh]
 fn marg8uintin() {
-    _ = (0 );  
+    _ = (0 );
   _ = isNormal(4.);
 _ =   (vec4<f32>( 2.));
 
@@ -37,36 +37,36 @@
 };
 
 struct F32s {
-  values : [[stride(4)]] array<f32>;
+  values : @stride(4) array<f32>;
 };
 
 struct U32s {
-  values : [[stride(4)]] array<u32>;
+  values : @stride(4) array<u32>;
 };
 
 struct I32s {
-  values : [[stride(4)]] array<i32>;
+  values : @stride(4) array<i32>;
 };
 
 struct AU32s {
-  values : [[stride(4)]] array<atomic<u32>>;
+  values : @stride(4) array<atomic<u32>>;
 };
 
 struct AI32s {
-  values : [[stride(4)]] array<atomic<i32>>;
+  values : @stride(4) array<atomic<i32>>;
 };
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
-[[binding(10), group(0)]] var<storage, read_write> indices : U32s;
+@binding(10) @group(0) var<storage, read_write> indices : U32s;
 
-[[binding(11), group(0)]] var<storage, read_write> positions : F32s;
+@binding(11) @group(0) var<storage, read_write> positions : F32s;
 
-[[binding(20), group(0)]] var<storage, read_write> counters : AU32s;
+@binding(20) @group(0) var<storage, read_write> counters : AU32s;
 
-[[binding(21), group(0)]] var<storage, read_write> LUT : AI32s;
+@binding(21) @group(0) var<storage, read_write> LUT : AI32s;
 
-[[binding(50), group(0)]] var<storage, read_write> dbg : Dbg;
+@binding(50) @group(0) var<storage, read_write> dbg : Dbg;
 
 fn toVoxelPos(position : vec3<f32>) -> vec3<f32> {
   var bbMin = vec3<f32>(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
@@ -106,8 +106,8 @@
   var g55 = atomicLoad(&(LUT.values[0]));
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_count([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_count(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var triangleIndex = GlobalInvocationID.x;
   if ((triangleIndex >= uniforms.numTriangles)) {
     return;
diff --git a/test/bug/chromium/1273230.wgsl.expected.wgsl b/test/bug/chromium/1273230.wgsl.expected.wgsl
index 4708e0b..3cdfc2b 100644
--- a/test/bug/chromium/1273230.wgsl.expected.wgsl
+++ b/test/bug/chromium/1273230.wgsl.expected.wgsl
@@ -54,36 +54,36 @@
 }
 
 struct F32s {
-  values : [[stride(4)]] array<f32>;
+  values : @stride(4) array<f32>;
 }
 
 struct U32s {
-  values : [[stride(4)]] array<u32>;
+  values : @stride(4) array<u32>;
 }
 
 struct I32s {
-  values : [[stride(4)]] array<i32>;
+  values : @stride(4) array<i32>;
 }
 
 struct AU32s {
-  values : [[stride(4)]] array<atomic<u32>>;
+  values : @stride(4) array<atomic<u32>>;
 }
 
 struct AI32s {
-  values : [[stride(4)]] array<atomic<i32>>;
+  values : @stride(4) array<atomic<i32>>;
 }
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
-[[binding(10), group(0)]] var<storage, read_write> indices : U32s;
+@binding(10) @group(0) var<storage, read_write> indices : U32s;
 
-[[binding(11), group(0)]] var<storage, read_write> positions : F32s;
+@binding(11) @group(0) var<storage, read_write> positions : F32s;
 
-[[binding(20), group(0)]] var<storage, read_write> counters : AU32s;
+@binding(20) @group(0) var<storage, read_write> counters : AU32s;
 
-[[binding(21), group(0)]] var<storage, read_write> LUT : AI32s;
+@binding(21) @group(0) var<storage, read_write> LUT : AI32s;
 
-[[binding(50), group(0)]] var<storage, read_write> dbg : Dbg;
+@binding(50) @group(0) var<storage, read_write> dbg : Dbg;
 
 fn toVoxelPos(position : vec3<f32>) -> vec3<f32> {
   var bbMin = vec3<f32>(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
@@ -123,8 +123,8 @@
   var g55 = atomicLoad(&(LUT.values[0]));
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_count([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_count(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var triangleIndex = GlobalInvocationID.x;
   if ((triangleIndex >= uniforms.numTriangles)) {
     return;
diff --git a/test/bug/dawn/947.wgsl b/test/bug/dawn/947.wgsl
index 008d88a..fe12948 100644
--- a/test/bug/dawn/947.wgsl
+++ b/test/bug/dawn/947.wgsl
@@ -2,15 +2,15 @@
     u_scale : vec2<f32>;

     u_offset : vec2<f32>;

 };

-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;

+@binding(0) @group(0) var<uniform> uniforms : Uniforms;

 

 struct VertexOutputs {

-    [[location(0)]] texcoords : vec2<f32>;

-    [[builtin(position)]] position : vec4<f32>;

+    @location(0) texcoords : vec2<f32>;

+    @builtin(position) position : vec4<f32>;

 };

 

-[[stage(vertex)]] fn vs_main(

-    [[builtin(vertex_index)]] VertexIndex : u32

+@stage(vertex) fn vs_main(

+    @builtin(vertex_index) VertexIndex : u32

 ) -> VertexOutputs {

     var texcoord = array<vec2<f32>, 3>(

         vec2<f32>(-0.5, 0.0),

@@ -43,12 +43,12 @@
     return output;

 }

 

-[[binding(1), group(0)]] var mySampler: sampler;

-[[binding(2), group(0)]] var myTexture: texture_2d<f32>;

+@binding(1) @group(0) var mySampler: sampler;

+@binding(2) @group(0) var myTexture: texture_2d<f32>;

 

-[[stage(fragment)]] fn fs_main(

-    [[location(0)]] texcoord : vec2<f32>

-) -> [[location(0)]] vec4<f32> {

+@stage(fragment) fn fs_main(

+    @location(0) texcoord : vec2<f32>

+) -> @location(0) vec4<f32> {

     // Clamp the texcoord and discard the out-of-bound pixels.

     var clampedTexcoord =

         clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));

diff --git a/test/bug/dawn/947.wgsl.expected.wgsl b/test/bug/dawn/947.wgsl.expected.wgsl
index a7e4f69..ff78e61 100644
--- a/test/bug/dawn/947.wgsl.expected.wgsl
+++ b/test/bug/dawn/947.wgsl.expected.wgsl
@@ -3,17 +3,17 @@
   u_offset : vec2<f32>;
 }
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
 struct VertexOutputs {
-  [[location(0)]]
+  @location(0)
   texcoords : vec2<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
 }
 
-[[stage(vertex)]]
-fn vs_main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOutputs {
+@stage(vertex)
+fn vs_main(@builtin(vertex_index) VertexIndex : u32) -> VertexOutputs {
   var texcoord = 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);
@@ -26,12 +26,12 @@
   return output;
 }
 
-[[binding(1), group(0)]] var mySampler : sampler;
+@binding(1) @group(0) var mySampler : sampler;
 
-[[binding(2), group(0)]] var myTexture : texture_2d<f32>;
+@binding(2) @group(0) var myTexture : texture_2d<f32>;
 
-[[stage(fragment)]]
-fn fs_main([[location(0)]] texcoord : vec2<f32>) -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn fs_main(@location(0) texcoord : vec2<f32>) -> @location(0) vec4<f32> {
   var clampedTexcoord = clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
   if (!(all((clampedTexcoord == texcoord)))) {
     discard;
diff --git a/test/bug/fxc/dyn_array_idx/read/function.wgsl b/test/bug/fxc/dyn_array_idx/read/function.wgsl
index 5af0065..55ce8a2 100644
--- a/test/bug/fxc/dyn_array_idx/read/function.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/function.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var s : S;
   result.out = s.data[ubo.dynamic_idx];
diff --git a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl
index 9487d56..bd5d8d7 100644
--- a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,9 +12,9 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var s : S;
   result.out = s.data[ubo.dynamic_idx];
diff --git a/test/bug/fxc/dyn_array_idx/read/private.wgsl b/test/bug/fxc/dyn_array_idx/read/private.wgsl
index c7c0b7a..2d7729b 100644
--- a/test/bug/fxc/dyn_array_idx/read/private.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/private.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
 var<private> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = s.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl
index 352b5e2..fd84a46 100644
--- a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,11 +12,11 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
 var<private> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = s.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/storage.wgsl b/test/bug/fxc/dyn_array_idx/read/storage.wgsl
index 62908a2..432c59c 100644
--- a/test/bug/fxc/dyn_array_idx/read/storage.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/storage.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct Result {
   out: i32;
 };
-[[group(0), binding(2)]] var<storage, read_write> result: Result;
+@group(0) @binding(2) var<storage, read_write> result: Result;
 
 struct SSBO {
   data: array<i32, 4>;
 };
-[[group(0), binding(1)]] var<storage, read_write> ssbo: SSBO;
+@group(0) @binding(1) var<storage, read_write> ssbo: SSBO;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = ssbo.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl
index 5445952..9fdea5f 100644
--- a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl
@@ -2,21 +2,21 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct Result {
   out : i32;
 }
 
-[[group(0), binding(2)]] var<storage, read_write> result : Result;
+@group(0) @binding(2) var<storage, read_write> result : Result;
 
 struct SSBO {
   data : array<i32, 4>;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> ssbo : SSBO;
+@group(0) @binding(1) var<storage, read_write> ssbo : SSBO;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = ssbo.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl
index 22d1133..be26146 100644
--- a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl
@@ -1,14 +1,14 @@
 struct UBO {
-  data: [[stride(16)]] array<i32, 4>;
+  data: @stride(16) array<i32, 4>;
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct Result {
   out: i32;
 };
-[[group(0), binding(2)]] var<storage, read_write> result: Result;
+@group(0) @binding(2) var<storage, read_write> result: Result;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = ubo.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl
index d0f1e72..7f3ca0b 100644
--- a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl
@@ -1,17 +1,17 @@
 struct UBO {
-  data : [[stride(16)]] array<i32, 4>;
+  data : @stride(16) array<i32, 4>;
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct Result {
   out : i32;
 }
 
-[[group(0), binding(2)]] var<storage, read_write> result : Result;
+@group(0) @binding(2) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = ubo.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl
index 66450c2..024506f 100644
--- a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
 var<workgroup> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = s.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl
index 80a812d..9427391 100644
--- a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,11 +12,11 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
 var<workgroup> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   result.out = s.data[ubo.dynamic_idx];
 }
diff --git a/test/bug/fxc/dyn_array_idx/write/function.wgsl b/test/bug/fxc/dyn_array_idx/write/function.wgsl
index 3dea9fa..b183971 100644
--- a/test/bug/fxc/dyn_array_idx/write/function.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/function.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var s : S;
   s.data[ubo.dynamic_idx] = 1;
diff --git a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl
index 18b069c..1504f92 100644
--- a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,9 +12,9 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var s : S;
   s.data[ubo.dynamic_idx] = 1;
diff --git a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl
index bf46f99..4a5bc5f 100644
--- a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl
@@ -1,20 +1,20 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
 fn x(p : ptr<function, S>) {
   (*p).data[ubo.dynamic_idx] = 1;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var s : S;
   x(&s);
diff --git a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl
index 57c8a26..52bbcc4 100644
--- a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,13 +12,13 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
 fn x(p : ptr<function, S>) {
   (*(p)).data[ubo.dynamic_idx] = 1;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var s : S;
   x(&(s));
diff --git a/test/bug/fxc/dyn_array_idx/write/private.wgsl b/test/bug/fxc/dyn_array_idx/write/private.wgsl
index c8fade0..2720426 100644
--- a/test/bug/fxc/dyn_array_idx/write/private.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/private.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
 var<private> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   s.data[ubo.dynamic_idx] = 1;
   result.out = s.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl
index 7544006..d4c7b0e 100644
--- a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,11 +12,11 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
 var<private> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   s.data[ubo.dynamic_idx] = 1;
   result.out = s.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl
index 3c7cf56..c123fe7 100644
--- a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl
@@ -1,14 +1,14 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
 var<private> s : S;
 
@@ -16,7 +16,7 @@
   (*p).data[ubo.dynamic_idx] = 1;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   x(&s);
   result.out = s.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl
index fd99ff2..d4d329f 100644
--- a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,7 +12,7 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
 var<private> s : S;
 
@@ -20,7 +20,7 @@
   (*(p)).data[ubo.dynamic_idx] = 1;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   x(&(s));
   result.out = s.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/storage.wgsl b/test/bug/fxc/dyn_array_idx/write/storage.wgsl
index 0ced96e..9e4babe 100644
--- a/test/bug/fxc/dyn_array_idx/write/storage.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/storage.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct Result {
   out: i32;
 };
-[[group(0), binding(2)]] var<storage, read_write> result: Result;
+@group(0) @binding(2) var<storage, read_write> result: Result;
 
 struct SSBO {
   data: array<i32, 4>;
 };
-[[group(0), binding(1)]] var<storage, read_write> ssbo: SSBO;
+@group(0) @binding(1) var<storage, read_write> ssbo: SSBO;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   ssbo.data[ubo.dynamic_idx] = 1;
   result.out = ssbo.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl
index b3d0217..2f5ce76 100644
--- a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl
@@ -2,21 +2,21 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct Result {
   out : i32;
 }
 
-[[group(0), binding(2)]] var<storage, read_write> result : Result;
+@group(0) @binding(2) var<storage, read_write> result : Result;
 
 struct SSBO {
   data : array<i32, 4>;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> ssbo : SSBO;
+@group(0) @binding(1) var<storage, read_write> ssbo : SSBO;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   ssbo.data[ubo.dynamic_idx] = 1;
   result.out = ssbo.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl
index 8f7e84b..961f020 100644
--- a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx: i32;
 };
-[[group(0), binding(0)]] var<uniform> ubo: UBO;
+@group(0) @binding(0) var<uniform> ubo: UBO;
 struct S {
   data: array<i32, 64>;
 };
 struct Result {
   out: i32;
 };
-[[group(0), binding(1)]] var<storage, read_write> result: Result;
+@group(0) @binding(1) var<storage, read_write> result: Result;
 
 var<workgroup> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   s.data[ubo.dynamic_idx] = 1;
   result.out = s.data[3];
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl
index 7c122d1..f0026f9 100644
--- a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   dynamic_idx : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> ubo : UBO;
+@group(0) @binding(0) var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
@@ -12,11 +12,11 @@
   out : i32;
 }
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
 var<workgroup> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   s.data[ubo.dynamic_idx] = 1;
   result.out = s.data[3];
diff --git a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl
index b4dff54..bc9a36c 100644
--- a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl
+++ b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl
@@ -1,10 +1,10 @@
 // 1112.wgsl

-[[group(0), binding(0)]] var Sampler: sampler;

-[[group(0), binding(1)]] var randomTexture: texture_2d<f32>;

-[[group(0), binding(2)]] var depthTexture: texture_2d<f32>;

+@group(0) @binding(0) var Sampler: sampler;

+@group(0) @binding(1) var randomTexture: texture_2d<f32>;

+@group(0) @binding(2) var depthTexture: texture_2d<f32>;

 

-[[stage(fragment)]]

-fn main([[location(0)]] vUV : vec2<f32>) -> [[location(0)]] vec4<f32> {

+@stage(fragment)

+fn main(@location(0) vUV : vec2<f32>) -> @location(0) vec4<f32> {

     let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;

 

     var i = 0;

diff --git a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.wgsl b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.wgsl
index 6728e4e..0998c72 100644
--- a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.wgsl
+++ b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.wgsl
@@ -1,11 +1,11 @@
-[[group(0), binding(0)]] var Sampler : sampler;
+@group(0) @binding(0) var Sampler : sampler;
 
-[[group(0), binding(1)]] var randomTexture : texture_2d<f32>;
+@group(0) @binding(1) var randomTexture : texture_2d<f32>;
 
-[[group(0), binding(2)]] var depthTexture : texture_2d<f32>;
+@group(0) @binding(2) var depthTexture : texture_2d<f32>;
 
-[[stage(fragment)]]
-fn main([[location(0)]] vUV : vec2<f32>) -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn main(@location(0) vUV : vec2<f32>) -> @location(0) vec4<f32> {
   let random : vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
   var i = 0;
   loop {
diff --git a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl
index df48e4c..773dd61 100644
--- a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl
+++ b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl
@@ -13,10 +13,10 @@
   p : array<Particle>;

 };

 

-[[group(1), binding(3)]] var<storage, read> particles : Particles;

-[[group(1), binding(4)]] var<uniform> sim : Simulation;

+@group(1) @binding(3) var<storage, read> particles : Particles;

+@group(1) @binding(4) var<uniform> sim : Simulation;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var particle = particles.p[0];

   particle.position[sim.i] = particle.position[sim.i];

diff --git a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl
index 818e3b4..df8979b 100644
--- a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl
+++ b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl
@@ -13,11 +13,11 @@
   p : array<Particle>;
 }
 
-[[group(1), binding(3)]] var<storage, read> particles : Particles;
+@group(1) @binding(3) var<storage, read> particles : Particles;
 
-[[group(1), binding(4)]] var<uniform> sim : Simulation;
+@group(1) @binding(4) var<uniform> sim : Simulation;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var particle = particles.p[0];
   particle.position[sim.i] = particle.position[sim.i];
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl
index ea01de2..30627d8 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl
@@ -3,9 +3,9 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var m1 : mat2x4<f32>;

   m1[uniforms.i][0] = 1.0;

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl
index 3b201de..9f79724 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m1 : mat2x4<f32>;
   m1[uniforms.i][0] = 1.0;
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl
index aab333e..e72acfe 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl
@@ -3,9 +3,9 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var m1 : mat2x4<f32>;

   m1[uniforms.i][uniforms.j] = 1.0;

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl
index 8b37003..9847626 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m1 : mat2x4<f32>;
   m1[uniforms.i][uniforms.j] = 1.0;
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl
index f893f32..87d95ad 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl
@@ -3,11 +3,11 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 var<private> m1 : mat2x4<f32>;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   m1[0][uniforms.j] = 1.0;

 }

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl
index 031f689..0bf7965 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl
@@ -3,11 +3,11 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 var<private> m1 : mat2x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   m1[0][uniforms.j] = 1.0;
 }
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl
index e5ccc3d..8db52b8 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl
@@ -3,9 +3,9 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var m1 : mat2x4<f32>;

   m1[uniforms.i] = vec4<f32>(1.0);

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl
index 4dc3783..87cf58c 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m1 : mat2x4<f32>;
   m1[uniforms.i] = vec4<f32>(1.0);
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl
index d12c19c..ed33805 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl
@@ -3,11 +3,11 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 var<private> m1 : mat2x4<f32>;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   m1[uniforms.i][0] = 1.0;

 }

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl
index bc312b2..8f5c87a 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl
@@ -3,11 +3,11 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 var<private> m1 : mat2x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   m1[uniforms.i][0] = 1.0;
 }
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl
index 40b2bbb..c7e750e 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl
@@ -3,11 +3,11 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 var<private> m1 : mat2x4<f32>;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   m1[uniforms.i][uniforms.j] = 1.0;

 }

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl
index f706b60..6419eb2 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl
@@ -3,11 +3,11 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 var<private> m1 : mat2x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   m1[uniforms.i][uniforms.j] = 1.0;
 }
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl
index f893f32..87d95ad 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl
@@ -3,11 +3,11 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 var<private> m1 : mat2x4<f32>;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   m1[0][uniforms.j] = 1.0;

 }

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl
index 031f689..0bf7965 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl
@@ -3,11 +3,11 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 var<private> m1 : mat2x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   m1[0][uniforms.j] = 1.0;
 }
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl
index de3bcaa..88338a5 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl
@@ -3,11 +3,11 @@
   j : u32;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 var<private> m1 : mat2x4<f32>;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   m1[uniforms.i] = vec4<f32>(1.0);

 }

diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl
index b1c7255..3642ca8 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl
@@ -3,11 +3,11 @@
   j : u32;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 var<private> m1 : mat2x4<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   m1[uniforms.i] = vec4<f32>(1.0);
 }
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl
index a684c56..82fdac2 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl
@@ -12,7 +12,7 @@
   }
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
 
   for (var i : i32 = 0; i < 2; i = i + 1) {
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.wgsl
index def10cb..be75b18 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.wgsl
@@ -15,7 +15,7 @@
   }
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   for(var i : i32 = 0; (i < 2); i = (i + 1)) {
     foo();
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl
index c85e301..f7d64cd 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl
@@ -11,7 +11,7 @@
   v2b[i] = true;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
 
   for (var i : i32 = 0; i < 2; i = i + 1) {
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.wgsl
index 21db9dd..8b055f2 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.wgsl
@@ -14,7 +14,7 @@
   v2b[i] = true;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   for(var i : i32 = 0; (i < 2); i = (i + 1)) {
     foo();
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl
index 5d42838..51460eb 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v3f : vec3<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.wgsl
index 9f8f2e0..45acb5d 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v3f : vec3<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl
index 7b91e48..beeaa2c 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v2f_2 : vec2<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.wgsl
index 74950ca..659db49 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v2f_2 : vec2<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl
index d255bcc..c48c1a8 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v3f : vec3<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.wgsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.wgsl
index 1fada75..01115a6 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v3f : vec3<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl
index 276355c..2ff69eb 100644
--- a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v3f : vec3<f32>;
diff --git a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.wgsl b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.wgsl
index 2d26774..72a4494 100644
--- a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.wgsl
+++ b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   var v2f : vec2<f32>;
   var v3f : vec3<f32>;
diff --git a/test/bug/tint/1046.wgsl b/test/bug/tint/1046.wgsl
index 8fdfe17..a294edf 100644
--- a/test/bug/tint/1046.wgsl
+++ b/test/bug/tint/1046.wgsl
@@ -4,7 +4,7 @@
 };
 
  struct PointLights {
-    values : [[stride(16)]] array<PointLight>;
+    values : @stride(16) array<PointLight>;
 };
 
  struct Uniforms {
@@ -15,21 +15,21 @@
     color : vec4<f32>;
 };
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
-[[binding(1), group(0)]] var<storage_buffer, read> pointLights : PointLights;
-[[binding(2), group(0)]] var mySampler: sampler;
-[[binding(3), group(0)]] var myTexture: texture_2d<f32>;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
+@binding(1) @group(0) var<storage_buffer, read> pointLights : PointLights;
+@binding(2) @group(0) var mySampler: sampler;
+@binding(3) @group(0) var myTexture: texture_2d<f32>;
 
 struct FragmentInput {
-    [[builtin(position)]] position  : vec4<f32>;
-    [[location(0)]] view_position   : vec4<f32>;
-    [[location(1)]] normal          : vec4<f32>;
-    [[location(2)]] uv              : vec2<f32>;
-    [[location(3)]] color           : vec4<f32>;
+    @builtin(position) position  : vec4<f32>;
+    @location(0) view_position   : vec4<f32>;
+    @location(1) normal          : vec4<f32>;
+    @location(2) uv              : vec2<f32>;
+    @location(3) color           : vec4<f32>;
 };
 
 struct FragmentOutput {
-    [[location(0)]] color : vec4<f32>;
+    @location(0) color : vec4<f32>;
 };
 
 fn getColor(fragment : FragmentInput) -> vec4<f32>{
@@ -63,7 +63,7 @@
     return color;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(fragment : FragmentInput) -> FragmentOutput {
 
     var output : FragmentOutput;
diff --git a/test/bug/tint/1046.wgsl.expected.wgsl b/test/bug/tint/1046.wgsl.expected.wgsl
index d67947b..b7000e6 100644
--- a/test/bug/tint/1046.wgsl.expected.wgsl
+++ b/test/bug/tint/1046.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
 }
 
 struct PointLights {
-  values : [[stride(16)]] array<PointLight>;
+  values : @stride(16) array<PointLight>;
 }
 
 struct Uniforms {
@@ -14,29 +14,29 @@
   color : vec4<f32>;
 }
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
-[[binding(1), group(0)]] var<storage, read> pointLights : PointLights;
+@binding(1) @group(0) var<storage, read> pointLights : PointLights;
 
-[[binding(2), group(0)]] var mySampler : sampler;
+@binding(2) @group(0) var mySampler : sampler;
 
-[[binding(3), group(0)]] var myTexture : texture_2d<f32>;
+@binding(3) @group(0) var myTexture : texture_2d<f32>;
 
 struct FragmentInput {
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   view_position : vec4<f32>;
-  [[location(1)]]
+  @location(1)
   normal : vec4<f32>;
-  [[location(2)]]
+  @location(2)
   uv : vec2<f32>;
-  [[location(3)]]
+  @location(3)
   color : vec4<f32>;
 }
 
 struct FragmentOutput {
-  [[location(0)]]
+  @location(0)
   color : vec4<f32>;
 }
 
@@ -55,7 +55,7 @@
   return color;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(fragment : FragmentInput) -> FragmentOutput {
   var output : FragmentOutput;
   output.color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
diff --git a/test/bug/tint/1064.wgsl b/test/bug/tint/1064.wgsl
index 782a564..4ab5117 100644
--- a/test/bug/tint/1064.wgsl
+++ b/test/bug/tint/1064.wgsl
@@ -1,4 +1,4 @@
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   loop {
     if (false) {
diff --git a/test/bug/tint/1064.wgsl.expected.wgsl b/test/bug/tint/1064.wgsl.expected.wgsl
index 27842dc..581cb90 100644
--- a/test/bug/tint/1064.wgsl.expected.wgsl
+++ b/test/bug/tint/1064.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   loop {
     if (false) {
diff --git a/test/bug/tint/1076.wgsl b/test/bug/tint/1076.wgsl
index b854b18..efa85b8 100644
--- a/test/bug/tint/1076.wgsl
+++ b/test/bug/tint/1076.wgsl
@@ -1,10 +1,10 @@
 struct FragIn {
-  [[location(0)]] a : f32;
-  [[builtin(sample_mask)]] mask : u32;
+  @location(0) a : f32;
+  @builtin(sample_mask) mask : u32;
 };
 
-[[stage(fragment)]]
-fn main(in : FragIn, [[location(1)]] b : f32) -> FragIn {
+@stage(fragment)
+fn main(in : FragIn, @location(1) b : f32) -> FragIn {
   if (in.mask == 0u) {
     return in;
   }
diff --git a/test/bug/tint/1076.wgsl.expected.wgsl b/test/bug/tint/1076.wgsl.expected.wgsl
index 8a91c08..4be185f 100644
--- a/test/bug/tint/1076.wgsl.expected.wgsl
+++ b/test/bug/tint/1076.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct FragIn {
-  [[location(0)]]
+  @location(0)
   a : f32;
-  [[builtin(sample_mask)]]
+  @builtin(sample_mask)
   mask : u32;
 }
 
-[[stage(fragment)]]
-fn main(in : FragIn, [[location(1)]] b : f32) -> FragIn {
+@stage(fragment)
+fn main(in : FragIn, @location(1) b : f32) -> FragIn {
   if ((in.mask == 0u)) {
     return in;
   }
diff --git a/test/bug/tint/1081.wgsl b/test/bug/tint/1081.wgsl
index 7350e4c..591fb04 100644
--- a/test/bug/tint/1081.wgsl
+++ b/test/bug/tint/1081.wgsl
@@ -5,8 +5,8 @@
   return x;
 }
 
-[[stage(fragment)]]
-fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
+@stage(fragment)
+fn main(@location(1) x: vec3<i32>) -> @location(2) i32 {
   var y = x.x;
   loop {
     let r = f(y);
diff --git a/test/bug/tint/1081.wgsl.expected.glsl b/test/bug/tint/1081.wgsl.expected.glsl
index f86361a..dda1d6b 100644
--- a/test/bug/tint/1081.wgsl.expected.glsl
+++ b/test/bug/tint/1081.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 bug/tint/1081.wgsl:9:25 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
+fn main(@location(1) x: vec3<i32>) -> @location(2) i32 {
                         ^
 
 #version 310 es
@@ -51,7 +51,7 @@
 
 Error parsing GLSL shader:
 ERROR: 0:35: 'int' : must be qualified as flat in
-ERROR: 0:35: '' : compilation terminated 
+ERROR: 0:35: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/bug/tint/1081.wgsl.expected.hlsl b/test/bug/tint/1081.wgsl.expected.hlsl
index 1aba907..73e2830 100644
--- a/test/bug/tint/1081.wgsl.expected.hlsl
+++ b/test/bug/tint/1081.wgsl.expected.hlsl
@@ -1,6 +1,6 @@
-bug/tint/1081.wgsl:9:25 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
-                        ^
+bug/tint/1081.wgsl:9:22 warning: integral user-defined fragment inputs must have a flat interpolation attribute
+fn main(@location(1) x: vec3<i32>) -> @location(2) i32 {
+                     ^
 
 int f(int x) {
   if (true) {
diff --git a/test/bug/tint/1081.wgsl.expected.msl b/test/bug/tint/1081.wgsl.expected.msl
index 0d57311..478e1a5 100644
--- a/test/bug/tint/1081.wgsl.expected.msl
+++ b/test/bug/tint/1081.wgsl.expected.msl
@@ -1,6 +1,6 @@
-bug/tint/1081.wgsl:9:25 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
-                        ^
+bug/tint/1081.wgsl:9:22 warning: integral user-defined fragment inputs must have a flat interpolation attribute
+fn main(@location(1) x: vec3<i32>) -> @location(2) i32 {
+                     ^
 
 #include <metal_stdlib>
 
diff --git a/test/bug/tint/1081.wgsl.expected.spvasm b/test/bug/tint/1081.wgsl.expected.spvasm
index 58810de..b17a7e6 100644
--- a/test/bug/tint/1081.wgsl.expected.spvasm
+++ b/test/bug/tint/1081.wgsl.expected.spvasm
@@ -1,6 +1,6 @@
-bug/tint/1081.wgsl:9:25 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
-                        ^
+bug/tint/1081.wgsl:9:22 warning: integral user-defined fragment inputs must have a flat interpolation attribute
+fn main(@location(1) x: vec3<i32>) -> @location(2) i32 {
+                     ^
 
 ; SPIR-V
 ; Version: 1.3
diff --git a/test/bug/tint/1081.wgsl.expected.wgsl b/test/bug/tint/1081.wgsl.expected.wgsl
index ab2a38d..34d78e1 100644
--- a/test/bug/tint/1081.wgsl.expected.wgsl
+++ b/test/bug/tint/1081.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-bug/tint/1081.wgsl:9:25 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
-                        ^
+bug/tint/1081.wgsl:9:22 warning: integral user-defined fragment inputs must have a flat interpolation attribute
+fn main(@location(1) x: vec3<i32>) -> @location(2) i32 {
+                     ^
 
 fn f(x : i32) -> i32 {
   if ((x == 10)) {
@@ -9,8 +9,8 @@
   return x;
 }
 
-[[stage(fragment)]]
-fn main([[location(1)]] x : vec3<i32>) -> [[location(2)]] i32 {
+@stage(fragment)
+fn main(@location(1) x : vec3<i32>) -> @location(2) i32 {
   var y = x.x;
   loop {
     let r = f(y);
diff --git a/test/bug/tint/1083.wgsl b/test/bug/tint/1083.wgsl
index 3dc8fb2..12e985f 100644
--- a/test/bug/tint/1083.wgsl
+++ b/test/bug/tint/1083.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 0;
diff --git a/test/bug/tint/1083.wgsl.expected.wgsl b/test/bug/tint/1083.wgsl.expected.wgsl
index 57303cb..4d2024c 100644
--- a/test/bug/tint/1083.wgsl.expected.wgsl
+++ b/test/bug/tint/1083.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 0;
diff --git a/test/bug/tint/1086.wgsl b/test/bug/tint/1086.wgsl
index 6273135..a5c2982 100644
--- a/test/bug/tint/1086.wgsl
+++ b/test/bug/tint/1086.wgsl
@@ -8,7 +8,7 @@
   x(&v);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn f() {
   g();
 }
diff --git a/test/bug/tint/1086.wgsl.expected.wgsl b/test/bug/tint/1086.wgsl.expected.wgsl
index dbc74be..9c7a8fc 100644
--- a/test/bug/tint/1086.wgsl.expected.wgsl
+++ b/test/bug/tint/1086.wgsl.expected.wgsl
@@ -8,7 +8,7 @@
   x(&(v));
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn f() {
   g();
 }
diff --git a/test/bug/tint/1088.spvasm.expected.wgsl b/test/bug/tint/1088.spvasm.expected.wgsl
index d31ca16..c67da67 100644
--- a/test/bug/tint/1088.spvasm.expected.wgsl
+++ b/test/bug/tint/1088.spvasm.expected.wgsl
@@ -1,11 +1,11 @@
-type Arr = [[stride(64)]] array<mat4x4<f32>, 2u>;
+type Arr = @stride(64) array<mat4x4<f32>, 2u>;
 
-type Arr_1 = [[stride(16)]] array<f32, 4u>;
+type Arr_1 = @stride(16) array<f32, 4u>;
 
 struct LeftOver {
   worldViewProjection : mat4x4<f32>;
   time : f32;
-  [[size(12)]]
+  @size(12)
   padding : u32;
   test2 : Arr;
   test : Arr_1;
@@ -13,7 +13,7 @@
 
 var<private> position : vec3<f32>;
 
-[[group(2), binding(2)]] var<uniform> x_14 : LeftOver;
+@group(2) @binding(2) var<uniform> x_14 : LeftOver;
 
 var<private> vUV : vec2<f32>;
 
@@ -49,14 +49,14 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   vUV_1 : vec2<f32>;
 }
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec3<f32>, [[location(2)]] uv_param : vec2<f32>, [[location(1)]] normal_param : vec3<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec3<f32>, @location(2) uv_param : vec2<f32>, @location(1) normal_param : vec3<f32>) -> main_out {
   position = position_param;
   uv = uv_param;
   normal = normal_param;
diff --git a/test/bug/tint/1113.wgsl b/test/bug/tint/1113.wgsl
index 0e7874d..f3a080a 100644
--- a/test/bug/tint/1113.wgsl
+++ b/test/bug/tint/1113.wgsl
@@ -23,23 +23,23 @@
     value_f32_3 : f32;
 };
 
- struct F32s { values : [[stride(4)]] array<f32>; };
- struct U32s { values : [[stride(4)]] array<u32>; };
- struct I32s { values : [[stride(4)]] array<i32>; };
- struct AU32s { values : [[stride(4)]] array<atomic<u32>>; };
- struct AI32s { values : [[stride(4)]] array<atomic<i32>>; };
+ struct F32s { values : @stride(4) array<f32>; };
+ struct U32s { values : @stride(4) array<u32>; };
+ struct I32s { values : @stride(4) array<i32>; };
+ struct AU32s { values : @stride(4) array<atomic<u32>>; };
+ struct AI32s { values : @stride(4) array<atomic<i32>>; };
 
 // IN
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
-[[binding(10), group(0)]] var<storage, read_write> indices : U32s;
-[[binding(11), group(0)]] var<storage, read_write> positions : F32s;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
+@binding(10) @group(0) var<storage, read_write> indices : U32s;
+@binding(11) @group(0) var<storage, read_write> positions : F32s;
 
 // OUT
-[[binding(20), group(0)]] var<storage, read_write> counters : AU32s;
-[[binding(21), group(0)]] var<storage, read_write> LUT : AI32s;
+@binding(20) @group(0) var<storage, read_write> counters : AU32s;
+@binding(21) @group(0) var<storage, read_write> LUT : AI32s;
 
 // DEBUG
-[[binding(50), group(0)]] var<storage, read_write> dbg : Dbg;
+@binding(50) @group(0) var<storage, read_write> dbg : Dbg;
 
 fn toVoxelPos(position : vec3<f32>) -> vec3<f32>{
 
@@ -95,8 +95,8 @@
 
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_count([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_count(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
 
     var triangleIndex = GlobalInvocationID.x;
 
@@ -132,8 +132,8 @@
 
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_create_lut([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_create_lut(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
 
     var voxelIndex = GlobalInvocationID.x;
 
@@ -155,8 +155,8 @@
 
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_sort_triangles([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_sort_triangles(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
 
     var triangleIndex = GlobalInvocationID.x;
 
diff --git a/test/bug/tint/1113.wgsl.expected.wgsl b/test/bug/tint/1113.wgsl.expected.wgsl
index ce45595..9eeb16c 100644
--- a/test/bug/tint/1113.wgsl.expected.wgsl
+++ b/test/bug/tint/1113.wgsl.expected.wgsl
@@ -23,36 +23,36 @@
 }
 
 struct F32s {
-  values : [[stride(4)]] array<f32>;
+  values : @stride(4) array<f32>;
 }
 
 struct U32s {
-  values : [[stride(4)]] array<u32>;
+  values : @stride(4) array<u32>;
 }
 
 struct I32s {
-  values : [[stride(4)]] array<i32>;
+  values : @stride(4) array<i32>;
 }
 
 struct AU32s {
-  values : [[stride(4)]] array<atomic<u32>>;
+  values : @stride(4) array<atomic<u32>>;
 }
 
 struct AI32s {
-  values : [[stride(4)]] array<atomic<i32>>;
+  values : @stride(4) array<atomic<i32>>;
 }
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
-[[binding(10), group(0)]] var<storage, read_write> indices : U32s;
+@binding(10) @group(0) var<storage, read_write> indices : U32s;
 
-[[binding(11), group(0)]] var<storage, read_write> positions : F32s;
+@binding(11) @group(0) var<storage, read_write> positions : F32s;
 
-[[binding(20), group(0)]] var<storage, read_write> counters : AU32s;
+@binding(20) @group(0) var<storage, read_write> counters : AU32s;
 
-[[binding(21), group(0)]] var<storage, read_write> LUT : AI32s;
+@binding(21) @group(0) var<storage, read_write> LUT : AI32s;
 
-[[binding(50), group(0)]] var<storage, read_write> dbg : Dbg;
+@binding(50) @group(0) var<storage, read_write> dbg : Dbg;
 
 fn toVoxelPos(position : vec3<f32>) -> vec3<f32> {
   var bbMin = vec3<f32>(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
@@ -92,8 +92,8 @@
   var g55 = atomicLoad(&(LUT.values[0]));
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_count([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_count(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var triangleIndex = GlobalInvocationID.x;
   if ((triangleIndex >= uniforms.numTriangles)) {
     return;
@@ -117,8 +117,8 @@
   }
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_create_lut([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_create_lut(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var voxelIndex = GlobalInvocationID.x;
   doIgnore();
   var maxVoxels = ((uniforms.gridSize * uniforms.gridSize) * uniforms.gridSize);
@@ -133,8 +133,8 @@
   atomicStore(&(LUT.values[voxelIndex]), offset);
 }
 
-[[stage(compute), workgroup_size(128)]]
-fn main_sort_triangles([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(128)
+fn main_sort_triangles(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var triangleIndex = GlobalInvocationID.x;
   doIgnore();
   if ((triangleIndex >= uniforms.numTriangles)) {
diff --git a/test/bug/tint/1121.wgsl b/test/bug/tint/1121.wgsl
index c7fba35..24a125b 100644
--- a/test/bug/tint/1121.wgsl
+++ b/test/bug/tint/1121.wgsl
@@ -15,7 +15,7 @@
  struct LightsBuffer {
     lights: array<LightData>;
 };
-[[group(0), binding(0)]] var<storage, read_write> lightsBuffer: LightsBuffer;
+@group(0) @binding(0) var<storage, read_write> lightsBuffer: LightsBuffer;
 struct TileLightIdData {
     count: atomic<u32>;
     lightId: array<u32, 64>;
@@ -23,8 +23,8 @@
  struct Tiles {
     data: array<TileLightIdData, 4>;
 };
-[[group(1), binding(0)]] var<storage, read_write> tileLightId: Tiles;
-  
+@group(1) @binding(0) var<storage, read_write> tileLightId: Tiles;
+
  struct Config {
     numLights : u32;
     numTiles : u32;
@@ -33,7 +33,7 @@
     numTileLightSlot : u32;
     tileSize : u32;
 };
-[[group(2), binding(0)]] var<uniform> config: Config;
+@group(2) @binding(0) var<uniform> config: Config;
  struct Uniforms {
     min : vec4<f32>;
     max : vec4<f32>;
@@ -43,16 +43,16 @@
     // Tile info
     fullScreenSize : vec4<f32>;    // width, height
 };
-[[group(3), binding(0)]] var<uniform> uniforms: Uniforms;
-[[stage(compute), workgroup_size(64, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@group(3) @binding(0) var<uniform> uniforms: Uniforms;
+@stage(compute) @workgroup_size(64, 1, 1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
     var index = GlobalInvocationID.x;
     if (index >= config.numLights) {
         return;
     }
     // Light position updating
     lightsBuffer.lights[index].position.y = lightsBuffer.lights[index].position.y - 0.1 + 0.001 * (f32(index) - 64.0 * floor(f32(index) / 64.0));
-  
+
     if (lightsBuffer.lights[index].position.y < uniforms.min.y) {
         lightsBuffer.lights[index].position.y = uniforms.max.y;
     }
diff --git a/test/bug/tint/1121.wgsl.expected.wgsl b/test/bug/tint/1121.wgsl.expected.wgsl
index 2620967..61d81e5 100644
--- a/test/bug/tint/1121.wgsl.expected.wgsl
+++ b/test/bug/tint/1121.wgsl.expected.wgsl
@@ -8,7 +8,7 @@
   lights : array<LightData>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> lightsBuffer : LightsBuffer;
+@group(0) @binding(0) var<storage, read_write> lightsBuffer : LightsBuffer;
 
 struct TileLightIdData {
   count : atomic<u32>;
@@ -19,7 +19,7 @@
   data : array<TileLightIdData, 4>;
 }
 
-[[group(1), binding(0)]] var<storage, read_write> tileLightId : Tiles;
+@group(1) @binding(0) var<storage, read_write> tileLightId : Tiles;
 
 struct Config {
   numLights : u32;
@@ -30,7 +30,7 @@
   tileSize : u32;
 }
 
-[[group(2), binding(0)]] var<uniform> config : Config;
+@group(2) @binding(0) var<uniform> config : Config;
 
 struct Uniforms {
   min : vec4<f32>;
@@ -40,10 +40,10 @@
   fullScreenSize : vec4<f32>;
 }
 
-[[group(3), binding(0)]] var<uniform> uniforms : Uniforms;
+@group(3) @binding(0) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(64, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(64, 1, 1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var index = GlobalInvocationID.x;
   if ((index >= config.numLights)) {
     return;
diff --git a/test/bug/tint/1136.wgsl b/test/bug/tint/1136.wgsl
index ee73478..2fd739e 100644
--- a/test/bug/tint/1136.wgsl
+++ b/test/bug/tint/1136.wgsl
@@ -1,3 +1,3 @@
  struct Buffer { data: u32; };
-[[group(0), binding(0)]] var<storage, read_write> buffer: Buffer;
+@group(0) @binding(0) var<storage, read_write> buffer: Buffer;
 fn main() { buffer.data = buffer.data + 1u;  }
diff --git a/test/bug/tint/1136.wgsl.expected.wgsl b/test/bug/tint/1136.wgsl.expected.wgsl
index 7bf2195..d17771a 100644
--- a/test/bug/tint/1136.wgsl.expected.wgsl
+++ b/test/bug/tint/1136.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   data : u32;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> buffer : Buffer;
+@group(0) @binding(0) var<storage, read_write> buffer : Buffer;
 
 fn main() {
   buffer.data = (buffer.data + 1u);
diff --git a/test/bug/tint/1321.wgsl b/test/bug/tint/1321.wgsl
index 0c2d7ec..1ab9e23 100644
--- a/test/bug/tint/1321.wgsl
+++ b/test/bug/tint/1321.wgsl
@@ -2,7 +2,7 @@
   return 1;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var arr = array<f32, 4>();
   for (let a = &arr[foo()]; ;) {
diff --git a/test/bug/tint/1321.wgsl.expected.wgsl b/test/bug/tint/1321.wgsl.expected.wgsl
index 8f7d2f7..2117393 100644
--- a/test/bug/tint/1321.wgsl.expected.wgsl
+++ b/test/bug/tint/1321.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   return 1;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var arr = array<f32, 4>();
   for(let a = &(arr[foo()]); ; ) {
diff --git a/test/bug/tint/1369.wgsl b/test/bug/tint/1369.wgsl
index 434bb2b..b90b8e3 100644
--- a/test/bug/tint/1369.wgsl
+++ b/test/bug/tint/1369.wgsl
@@ -3,7 +3,7 @@
   return true;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn f() {
     var v = call_discard();
     var also_unreachable : bool;
diff --git a/test/bug/tint/1369.wgsl.expected.wgsl b/test/bug/tint/1369.wgsl.expected.wgsl
index eb44227..2da3171 100644
--- a/test/bug/tint/1369.wgsl.expected.wgsl
+++ b/test/bug/tint/1369.wgsl.expected.wgsl
@@ -11,7 +11,7 @@
   return true;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn f() {
   var v = call_discard();
   var also_unreachable : bool;
diff --git a/test/bug/tint/1385.wgsl b/test/bug/tint/1385.wgsl
index 6b4154a..78f402e 100644
--- a/test/bug/tint/1385.wgsl
+++ b/test/bug/tint/1385.wgsl
@@ -1,11 +1,11 @@
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<storage, read> data : array<i32>;
 
 fn foo() -> i32 {
   return data[0];
 }
 
-[[stage(compute), workgroup_size(16, 16, 1)]]
+@stage(compute) @workgroup_size(16, 16, 1)
 fn main() {
   foo();
 }
diff --git a/test/bug/tint/1385.wgsl.expected.wgsl b/test/bug/tint/1385.wgsl.expected.wgsl
index 98c9e90..3e522fd 100644
--- a/test/bug/tint/1385.wgsl.expected.wgsl
+++ b/test/bug/tint/1385.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(1)]] var<storage, read> data : array<i32>;
+@group(0) @binding(1) var<storage, read> data : array<i32>;
 
 fn foo() -> i32 {
   return data[0];
 }
 
-[[stage(compute), workgroup_size(16, 16, 1)]]
+@stage(compute) @workgroup_size(16, 16, 1)
 fn main() {
   foo();
 }
diff --git a/test/bug/tint/219.spvasm.expected.wgsl b/test/bug/tint/219.spvasm.expected.wgsl
index 0932553..3bc5263 100644
--- a/test/bug/tint/219.spvasm.expected.wgsl
+++ b/test/bug/tint/219.spvasm.expected.wgsl
@@ -9,7 +9,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/bug/tint/221.wgsl b/test/bug/tint/221.wgsl
index 9c6a70f..e38a666 100644
--- a/test/bug/tint/221.wgsl
+++ b/test/bug/tint/221.wgsl
@@ -5,9 +5,9 @@
   data : Arr;
 };
 
-[[group(0), binding (0)]] var<storage, read_write> b : Buf;
+@group(0) @binding(0) var<storage, read_write> b : Buf;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : u32 = 0u;
   loop {
diff --git a/test/bug/tint/221.wgsl.expected.wgsl b/test/bug/tint/221.wgsl.expected.wgsl
index 6173b61..a0e5251 100644
--- a/test/bug/tint/221.wgsl.expected.wgsl
+++ b/test/bug/tint/221.wgsl.expected.wgsl
@@ -5,9 +5,9 @@
   data : Arr;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> b : Buf;
+@group(0) @binding(0) var<storage, read_write> b : Buf;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : u32 = 0u;
   loop {
diff --git a/test/bug/tint/292.wgsl b/test/bug/tint/292.wgsl
index 78f469c..daebb4f 100644
--- a/test/bug/tint/292.wgsl
+++ b/test/bug/tint/292.wgsl
@@ -1,5 +1,5 @@
-[[stage(vertex)]]
-fn main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main() -> @builtin(position) vec4<f32> {
   var light : vec3<f32> = vec3<f32>(1.2, 1., 2.);
   var negative_light : vec3<f32> = -light;
   return vec4<f32>();
diff --git a/test/bug/tint/292.wgsl.expected.wgsl b/test/bug/tint/292.wgsl.expected.wgsl
index 08967d9..071b9da 100644
--- a/test/bug/tint/292.wgsl.expected.wgsl
+++ b/test/bug/tint/292.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
-[[stage(vertex)]]
-fn main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main() -> @builtin(position) vec4<f32> {
   var light : vec3<f32> = vec3<f32>(1.200000048, 1.0, 2.0);
   var negative_light : vec3<f32> = -(light);
   return vec4<f32>();
diff --git a/test/bug/tint/294.wgsl b/test/bug/tint/294.wgsl
index 83831c7..4917c47 100644
--- a/test/bug/tint/294.wgsl
+++ b/test/bug/tint/294.wgsl
@@ -3,6 +3,6 @@
   colour : vec3<f32>;
 };
  struct Lights {
-  light : [[stride(32)]] array<Light>;
+  light : @stride(32) array<Light>;
 };
-[[group(0), binding(1)]] var<storage, read> lights : Lights;
+@group(0) @binding(1) var<storage, read> lights : Lights;
diff --git a/test/bug/tint/294.wgsl.expected.wgsl b/test/bug/tint/294.wgsl.expected.wgsl
index f4c1358..87f08de 100644
--- a/test/bug/tint/294.wgsl.expected.wgsl
+++ b/test/bug/tint/294.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
 }
 
 struct Lights {
-  light : [[stride(32)]] array<Light>;
+  light : @stride(32) array<Light>;
 }
 
-[[group(0), binding(1)]] var<storage, read> lights : Lights;
+@group(0) @binding(1) var<storage, read> lights : Lights;
diff --git a/test/bug/tint/369.wgsl b/test/bug/tint/369.wgsl
index 05386cb..00383ab 100644
--- a/test/bug/tint/369.wgsl
+++ b/test/bug/tint/369.wgsl
@@ -2,5 +2,5 @@
     m : mat2x2<f32>;
 };
 
-[[group(0), binding(0)]] var<storage> SSBO : S;
-[[group(0), binding(0)]] var<uniform> UBO : S;
+@group(0) @binding(0) var<storage> SSBO : S;
+@group(0) @binding(0) var<uniform> UBO : S;
diff --git a/test/bug/tint/369.wgsl.expected.wgsl b/test/bug/tint/369.wgsl.expected.wgsl
index f4192a7..b361b1f 100644
--- a/test/bug/tint/369.wgsl.expected.wgsl
+++ b/test/bug/tint/369.wgsl.expected.wgsl
@@ -2,6 +2,6 @@
   m : mat2x2<f32>;
 }
 
-[[group(0), binding(0)]] var<storage> SSBO : S;
+@group(0) @binding(0) var<storage> SSBO : S;
 
-[[group(0), binding(0)]] var<uniform> UBO : S;
+@group(0) @binding(0) var<uniform> UBO : S;
diff --git a/test/bug/tint/403.wgsl b/test/bug/tint/403.wgsl
index 011fbf0..82d5e91 100644
--- a/test/bug/tint/403.wgsl
+++ b/test/bug/tint/403.wgsl
@@ -6,12 +6,12 @@
   transform2 : mat2x2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_20 : vertexUniformBuffer1;
-[[group(1), binding(0)]] var<uniform> x_26 : vertexUniformBuffer2;
+@group(0) @binding(0) var<uniform> x_20 : vertexUniformBuffer1;
+@group(1) @binding(0) var<uniform> x_26 : vertexUniformBuffer2;
 
 
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] gl_VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(@builtin(vertex_index) gl_VertexIndex : u32) -> @builtin(position) vec4<f32> {
   var indexable : array<vec2<f32>, 3>;
   let x_23 : mat2x2<f32> = x_20.transform1;
   let x_28 : mat2x2<f32> = x_26.transform2;
diff --git a/test/bug/tint/403.wgsl.expected.wgsl b/test/bug/tint/403.wgsl.expected.wgsl
index 2fa1f18..025e4a5 100644
--- a/test/bug/tint/403.wgsl.expected.wgsl
+++ b/test/bug/tint/403.wgsl.expected.wgsl
@@ -6,12 +6,12 @@
   transform2 : mat2x2<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> x_20 : vertexUniformBuffer1;
+@group(0) @binding(0) var<uniform> x_20 : vertexUniformBuffer1;
 
-[[group(1), binding(0)]] var<uniform> x_26 : vertexUniformBuffer2;
+@group(1) @binding(0) var<uniform> x_26 : vertexUniformBuffer2;
 
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] gl_VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(@builtin(vertex_index) gl_VertexIndex : u32) -> @builtin(position) vec4<f32> {
   var indexable : array<vec2<f32>, 3>;
   let x_23 : mat2x2<f32> = x_20.transform1;
   let x_28 : mat2x2<f32> = x_26.transform2;
diff --git a/test/bug/tint/413.spvasm.expected.wgsl b/test/bug/tint/413.spvasm.expected.wgsl
index 6ca1a05..a9318dc 100644
--- a/test/bug/tint/413.spvasm.expected.wgsl
+++ b/test/bug/tint/413.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var Src : texture_2d<u32>;
+@group(0) @binding(0) var Src : texture_2d<u32>;
 
-[[group(0), binding(1)]] var Dst : texture_storage_2d<r32uint, write>;
+@group(0) @binding(1) var Dst : texture_storage_2d<r32uint, write>;
 
 fn main_1() {
   var srcValue : vec4<u32>;
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/bug/tint/453.wgsl b/test/bug/tint/453.wgsl
index 588e7c2..99e53b4 100644
--- a/test/bug/tint/453.wgsl
+++ b/test/bug/tint/453.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]] var Src : texture_2d<u32>;
-[[group(0), binding(1)]] var Dst : texture_storage_2d<r32uint, write>;
+@group(0) @binding(0) var Src : texture_2d<u32>;
+@group(0) @binding(1) var Dst : texture_storage_2d<r32uint, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var srcValue : vec4<u32>;
   let x_22 : vec4<u32> = textureLoad(Src, vec2<i32>(0, 0), 0);
diff --git a/test/bug/tint/453.wgsl.expected.wgsl b/test/bug/tint/453.wgsl.expected.wgsl
index 92c30e7..8fe5795 100644
--- a/test/bug/tint/453.wgsl.expected.wgsl
+++ b/test/bug/tint/453.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var Src : texture_2d<u32>;
+@group(0) @binding(0) var Src : texture_2d<u32>;
 
-[[group(0), binding(1)]] var Dst : texture_storage_2d<r32uint, write>;
+@group(0) @binding(1) var Dst : texture_storage_2d<r32uint, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var srcValue : vec4<u32>;
   let x_22 : vec4<u32> = textureLoad(Src, vec2<i32>(0, 0), 0);
diff --git a/test/bug/tint/492.wgsl b/test/bug/tint/492.wgsl
index bbba0aa..48ae3df 100644
--- a/test/bug/tint/492.wgsl
+++ b/test/bug/tint/492.wgsl
@@ -1,7 +1,7 @@
  struct S { a : i32; };
-[[group(0), binding(0)]] var<storage, read_write> buf : S;
+@group(0) @binding(0) var<storage, read_write> buf : S;
 
-[[stage(compute), workgroup_size(1)]] fn main() {
+@stage(compute) @workgroup_size(1) fn main() {
   let p : ptr<storage, i32, read_write> = &buf.a;
   *p = 12;
 }
diff --git a/test/bug/tint/492.wgsl.expected.wgsl b/test/bug/tint/492.wgsl.expected.wgsl
index 6563f70..181e7e6 100644
--- a/test/bug/tint/492.wgsl.expected.wgsl
+++ b/test/bug/tint/492.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : i32;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> buf : S;
+@group(0) @binding(0) var<storage, read_write> buf : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<storage, i32, read_write> = &(buf.a);
   *(p) = 12;
diff --git a/test/bug/tint/534.wgsl b/test/bug/tint/534.wgsl
index 1aaf535..782f193 100644
--- a/test/bug/tint/534.wgsl
+++ b/test/bug/tint/534.wgsl
@@ -5,21 +5,21 @@
     channelCount : u32;

 };

  struct OutputBuf {

-    result : [[stride(4)]] array<u32>;

+    result : @stride(4) array<u32>;

 };

-[[group(0), binding(0)]] var src : texture_2d<f32>;

-[[group(0), binding(1)]] var dst : texture_2d<f32>;

-[[group(0), binding(2)]] var<storage_buffer, read_write> output : OutputBuf;

-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;

-//[[builtin(global_invocation_id)]] var<in> GlobalInvocationID : vec3<u32>;

+@group(0) @binding(0) var src : texture_2d<f32>;

+@group(0) @binding(1) var dst : texture_2d<f32>;

+@group(0) @binding(2) var<storage_buffer, read_write> output : OutputBuf;

+@group(0) @binding(3) var<uniform> uniforms : Uniforms;

+//@builtin(global_invocation_id) var<in> GlobalInvocationID : vec3<u32>;

 // Fp16 logic

 // Infinity and NaN won't happen in this test case.

 fn ConvertToFp16FloatValue(fp32 : f32) -> u32 {

     return 1u;

 }

 

-[[stage(compute), workgroup_size(1, 1, 1)]]

-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {

+@stage(compute) @workgroup_size(1, 1, 1)

+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {

     var size : vec2<i32> = textureDimensions(src);

     var dstTexCoord : vec2<i32> = vec2<i32>(GlobalInvocationID.xy);

     var srcTexCoord : vec2<i32> = dstTexCoord;

diff --git a/test/bug/tint/534.wgsl.expected.wgsl b/test/bug/tint/534.wgsl.expected.wgsl
index bc45f8a..dfd0f17 100644
--- a/test/bug/tint/534.wgsl.expected.wgsl
+++ b/test/bug/tint/534.wgsl.expected.wgsl
@@ -6,23 +6,23 @@
 }
 
 struct OutputBuf {
-  result : [[stride(4)]] array<u32>;
+  result : @stride(4) array<u32>;
 }
 
-[[group(0), binding(0)]] var src : texture_2d<f32>;
+@group(0) @binding(0) var src : texture_2d<f32>;
 
-[[group(0), binding(1)]] var dst : texture_2d<f32>;
+@group(0) @binding(1) var dst : texture_2d<f32>;
 
-[[group(0), binding(2)]] var<storage, read_write> output : OutputBuf;
+@group(0) @binding(2) var<storage, read_write> output : OutputBuf;
 
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 
 fn ConvertToFp16FloatValue(fp32 : f32) -> u32 {
   return 1u;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var size : vec2<i32> = textureDimensions(src);
   var dstTexCoord : vec2<i32> = vec2<i32>(GlobalInvocationID.xy);
   var srcTexCoord : vec2<i32> = dstTexCoord;
diff --git a/test/bug/tint/744.wgsl b/test/bug/tint/744.wgsl
index c8c8cd2..31daa13 100644
--- a/test/bug/tint/744.wgsl
+++ b/test/bug/tint/744.wgsl
@@ -7,13 +7,13 @@
     numbers: array<u32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> firstMatrix : Matrix;
-[[group(0), binding(1)]] var<storage, read> secondMatrix : Matrix;
-[[group(0), binding(2)]] var<storage, write> resultMatrix : Matrix;
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(0) var<storage, read> firstMatrix : Matrix;
+@group(0) @binding(1) var<storage, read> secondMatrix : Matrix;
+@group(0) @binding(2) var<storage, write> resultMatrix : Matrix;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(2,2,1)]]
-fn main([[builtin(global_invocation_id)]] global_id  : vec3<u32>) {
+@stage(compute) @workgroup_size(2,2,1)
+fn main(@builtin(global_invocation_id) global_id  : vec3<u32>) {
     let resultCell : vec2<u32> = vec2<u32>(global_id.y, global_id.x);
     let dimInner : u32 = uniforms.aShape.y;
     let dimOutter: u32 = uniforms.outShape.y;
diff --git a/test/bug/tint/744.wgsl.expected.wgsl b/test/bug/tint/744.wgsl.expected.wgsl
index 001dd88..e670d80 100644
--- a/test/bug/tint/744.wgsl.expected.wgsl
+++ b/test/bug/tint/744.wgsl.expected.wgsl
@@ -8,16 +8,16 @@
   numbers : array<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> firstMatrix : Matrix;
+@group(0) @binding(0) var<storage, read> firstMatrix : Matrix;
 
-[[group(0), binding(1)]] var<storage, read> secondMatrix : Matrix;
+@group(0) @binding(1) var<storage, read> secondMatrix : Matrix;
 
-[[group(0), binding(2)]] var<storage, write> resultMatrix : Matrix;
+@group(0) @binding(2) var<storage, write> resultMatrix : Matrix;
 
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(2, 2, 1)]]
-fn main([[builtin(global_invocation_id)]] global_id : vec3<u32>) {
+@stage(compute) @workgroup_size(2, 2, 1)
+fn main(@builtin(global_invocation_id) global_id : vec3<u32>) {
   let resultCell : vec2<u32> = vec2<u32>(global_id.y, global_id.x);
   let dimInner : u32 = uniforms.aShape.y;
   let dimOutter : u32 = uniforms.outShape.y;
diff --git a/test/bug/tint/749.spvasm.expected.wgsl b/test/bug/tint/749.spvasm.expected.wgsl
index 59e1920..f23b495 100644
--- a/test/bug/tint/749.spvasm.expected.wgsl
+++ b/test/bug/tint/749.spvasm.expected.wgsl
@@ -10,7 +10,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_188 : buf0;
+@group(0) @binding(0) var<uniform> x_188 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -1474,12 +1474,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 }
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/bug/tint/757.wgsl b/test/bug/tint/757.wgsl
index c5aca24..b2a05de 100644
--- a/test/bug/tint/757.wgsl
+++ b/test/bug/tint/757.wgsl
@@ -3,16 +3,16 @@
   level : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> constants : Constants;
-[[group(0), binding(1)]] var myTexture : texture_2d_array<f32>;
+@group(0) @binding(0) var<uniform> constants : Constants;
+@group(0) @binding(1) var myTexture : texture_2d_array<f32>;
 
  struct Result {
-  values : [[stride(4)]] array<f32>;
+  values : @stride(4) array<f32>;
 };
-[[group(0), binding(3)]] var<storage, read_write> result : Result;
+@group(0) @binding(3) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var flatIndex : u32 =
     2u * 2u * GlobalInvocationID.z +
     2u * GlobalInvocationID.y +
diff --git a/test/bug/tint/757.wgsl.expected.wgsl b/test/bug/tint/757.wgsl.expected.wgsl
index b19bb0c..b237cd5 100644
--- a/test/bug/tint/757.wgsl.expected.wgsl
+++ b/test/bug/tint/757.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   level : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> constants : Constants;
+@group(0) @binding(0) var<uniform> constants : Constants;
 
-[[group(0), binding(1)]] var myTexture : texture_2d_array<f32>;
+@group(0) @binding(1) var myTexture : texture_2d_array<f32>;
 
 struct Result {
-  values : [[stride(4)]] array<f32>;
+  values : @stride(4) array<f32>;
 }
 
-[[group(0), binding(3)]] var<storage, read_write> result : Result;
+@group(0) @binding(3) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   var flatIndex : u32 = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
   flatIndex = (flatIndex * 1u);
   var texel : vec4<f32> = textureLoad(myTexture, vec2<i32>(GlobalInvocationID.xy), 0, 0);
diff --git a/test/bug/tint/782.wgsl b/test/bug/tint/782.wgsl
index dbfcb00..3fe1f23 100644
--- a/test/bug/tint/782.wgsl
+++ b/test/bug/tint/782.wgsl
@@ -1,4 +1,4 @@
-type ArrayExplicitStride = [[stride(4)]] array<i32, 2>;
+type ArrayExplicitStride = @stride(4) array<i32, 2>;
 type ArrayImplicitStride =               array<i32, 2>;
 
 fn foo() {
diff --git a/test/bug/tint/782.wgsl.expected.wgsl b/test/bug/tint/782.wgsl.expected.wgsl
index 2719237..a4f37bc 100644
--- a/test/bug/tint/782.wgsl.expected.wgsl
+++ b/test/bug/tint/782.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-type ArrayExplicitStride = [[stride(4)]] array<i32, 2>;
+type ArrayExplicitStride = @stride(4) array<i32, 2>;
 
 type ArrayImplicitStride = array<i32, 2>;
 
diff --git a/test/bug/tint/804.spv.expected.glsl b/test/bug/tint/804.spv.expected.glsl
index f94b4a6..85b35ec 100644
--- a/test/bug/tint/804.spv.expected.glsl
+++ b/test/bug/tint/804.spv.expected.glsl
@@ -10,7 +10,7 @@
   field1 : u32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_75 : buf0;
+@group(0) @binding(0) var<uniform> x_75 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
diff --git a/test/bug/tint/804.spv.expected.hlsl b/test/bug/tint/804.spv.expected.hlsl
index f94b4a6..85b35ec 100644
--- a/test/bug/tint/804.spv.expected.hlsl
+++ b/test/bug/tint/804.spv.expected.hlsl
@@ -10,7 +10,7 @@
   field1 : u32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_75 : buf0;
+@group(0) @binding(0) var<uniform> x_75 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
diff --git a/test/bug/tint/824.wgsl b/test/bug/tint/824.wgsl
index ed907e3..68a7b66 100644
--- a/test/bug/tint/824.wgsl
+++ b/test/bug/tint/824.wgsl
@@ -1,10 +1,10 @@
 struct Output {
-    [[builtin(position)]] Position : vec4<f32>;
-    [[location(0)]] color : vec4<f32>;
+    @builtin(position) Position : vec4<f32>;
+    @location(0) color : vec4<f32>;
 };
-[[stage(vertex)]] fn main(
-    [[builtin(vertex_index)]] VertexIndex : u32,
-    [[builtin(instance_index)]] InstanceIndex : u32) -> Output {
+@stage(vertex) fn main(
+    @builtin(vertex_index) VertexIndex : u32,
+    @builtin(instance_index) InstanceIndex : u32) -> Output {
     // TODO: remove workaround for Tint unary array access broke
     let zv : array<vec2<f32>, 4> = array<vec2<f32>, 4>(
         vec2<f32>(0.2, 0.2),
diff --git a/test/bug/tint/824.wgsl.expected.wgsl b/test/bug/tint/824.wgsl.expected.wgsl
index 2c795fe..cb77758 100644
--- a/test/bug/tint/824.wgsl.expected.wgsl
+++ b/test/bug/tint/824.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct Output {
-  [[builtin(position)]]
+  @builtin(position)
   Position : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   color : vec4<f32>;
 }
 
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] VertexIndex : u32, [[builtin(instance_index)]] InstanceIndex : u32) -> Output {
+@stage(vertex)
+fn main(@builtin(vertex_index) VertexIndex : u32, @builtin(instance_index) InstanceIndex : u32) -> Output {
   let zv : array<vec2<f32>, 4> = array<vec2<f32>, 4>(vec2<f32>(0.200000003, 0.200000003), vec2<f32>(0.300000012, 0.300000012), vec2<f32>(-0.100000001, -0.100000001), vec2<f32>(1.100000024, 1.100000024));
   let z : f32 = zv[InstanceIndex].x;
   var output : Output;
diff --git a/test/bug/tint/827.wgsl b/test/bug/tint/827.wgsl
index 35fa8db..8a1bbe8 100644
--- a/test/bug/tint/827.wgsl
+++ b/test/bug/tint/827.wgsl
@@ -4,11 +4,11 @@
 
 let width : u32 = 128u;
 
-[[group(0), binding(0)]] var tex : texture_depth_2d;
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(0) var tex : texture_depth_2d;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]] fn main(
-    [[builtin(global_invocation_id)]] GlobalInvocationId : vec3<u32>
+@stage(compute) @workgroup_size(1) fn main(
+    @builtin(global_invocation_id) GlobalInvocationId : vec3<u32>
 ) {
     result.values[GlobalInvocationId.y * width + GlobalInvocationId.x] = textureLoad(
         tex, vec2<i32>(i32(GlobalInvocationId.x), i32(GlobalInvocationId.y)), 0);
diff --git a/test/bug/tint/827.wgsl.expected.wgsl b/test/bug/tint/827.wgsl.expected.wgsl
index af06757..2f7d250 100644
--- a/test/bug/tint/827.wgsl.expected.wgsl
+++ b/test/bug/tint/827.wgsl.expected.wgsl
@@ -4,11 +4,11 @@
 
 let width : u32 = 128u;
 
-[[group(0), binding(0)]] var tex : texture_depth_2d;
+@group(0) @binding(0) var tex : texture_depth_2d;
 
-[[group(0), binding(1)]] var<storage, read_write> result : Result;
+@group(0) @binding(1) var<storage, read_write> result : Result;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationId : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(global_invocation_id) GlobalInvocationId : vec3<u32>) {
   result.values[((GlobalInvocationId.y * width) + GlobalInvocationId.x)] = textureLoad(tex, vec2<i32>(i32(GlobalInvocationId.x), i32(GlobalInvocationId.y)), 0);
 }
diff --git a/test/bug/tint/870.spvasm.expected.wgsl b/test/bug/tint/870.spvasm.expected.wgsl
index 73a04d4..4af74ac 100644
--- a/test/bug/tint/870.spvasm.expected.wgsl
+++ b/test/bug/tint/870.spvasm.expected.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(4)]] array<i32, 6u>;
+type Arr = @stride(4) array<i32, 6u>;
 
 struct sspp962805860buildInformationS {
   footprint : vec4<f32>;
@@ -11,7 +11,7 @@
   passthru : sspp962805860buildInformationS;
 }
 
-[[group(0), binding(2)]] var<storage, read> sspp962805860buildInformation : x_B4_BuildInformation;
+@group(0) @binding(2) var<storage, read> sspp962805860buildInformation : x_B4_BuildInformation;
 
 fn main_1() {
   var orientation : array<i32, 6u>;
@@ -25,7 +25,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/bug/tint/913.wgsl b/test/bug/tint/913.wgsl
index 2df489f..8a49ced 100644
--- a/test/bug/tint/913.wgsl
+++ b/test/bug/tint/913.wgsl
@@ -8,16 +8,16 @@
  struct OutputBuf {
     result : array<u32>;
 };
-[[group(0), binding(0)]] var src : texture_2d<f32>;
-[[group(0), binding(1)]] var dst : texture_2d<f32>;
-[[group(0), binding(2)]] var<storage, read_write> output : OutputBuf;
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(0) var src : texture_2d<f32>;
+@group(0) @binding(1) var dst : texture_2d<f32>;
+@group(0) @binding(2) var<storage, read_write> output : OutputBuf;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 fn aboutEqual(value : f32, expect : f32) -> bool {
     // The value diff should be smaller than the hard coded tolerance.
     return abs(value - expect) < 0.001;
 }
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
     let srcSize : vec2<i32> = textureDimensions(src);
     let dstSize : vec2<i32> = textureDimensions(dst);
     let dstTexCoord : vec2<u32> = vec2<u32>(GlobalInvocationID.xy);
@@ -67,4 +67,4 @@
     } else {
         output.result[outputIndex] = 0u;
     }
-}
\ No newline at end of file
+}
diff --git a/test/bug/tint/913.wgsl.expected.wgsl b/test/bug/tint/913.wgsl.expected.wgsl
index 322d0b1..9c30250 100644
--- a/test/bug/tint/913.wgsl.expected.wgsl
+++ b/test/bug/tint/913.wgsl.expected.wgsl
@@ -10,20 +10,20 @@
   result : array<u32>;
 }
 
-[[group(0), binding(0)]] var src : texture_2d<f32>;
+@group(0) @binding(0) var src : texture_2d<f32>;
 
-[[group(0), binding(1)]] var dst : texture_2d<f32>;
+@group(0) @binding(1) var dst : texture_2d<f32>;
 
-[[group(0), binding(2)]] var<storage, read_write> output : OutputBuf;
+@group(0) @binding(2) var<storage, read_write> output : OutputBuf;
 
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 
 fn aboutEqual(value : f32, expect : f32) -> bool {
   return (abs((value - expect)) < 0.001);
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) GlobalInvocationID : vec3<u32>) {
   let srcSize : vec2<i32> = textureDimensions(src);
   let dstSize : vec2<i32> = textureDimensions(dst);
   let dstTexCoord : vec2<u32> = vec2<u32>(GlobalInvocationID.xy);
diff --git a/test/bug/tint/914.wgsl b/test/bug/tint/914.wgsl
index 372e0d1..655c3ab 100644
--- a/test/bug/tint/914.wgsl
+++ b/test/bug/tint/914.wgsl
@@ -7,10 +7,10 @@
     numbers: array<f32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> firstMatrix : Matrix;
-[[group(0), binding(1)]] var<storage, read> secondMatrix : Matrix;
-[[group(0), binding(2)]] var<storage, write> resultMatrix : Matrix;
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(0) var<storage, read> firstMatrix : Matrix;
+@group(0) @binding(1) var<storage, read> secondMatrix : Matrix;
+@group(0) @binding(2) var<storage, write> resultMatrix : Matrix;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 
 fn mm_readA(row : u32, col : u32) -> f32  {
     if (row < uniforms.dimAOuter && col < uniforms.dimInner)
@@ -45,9 +45,9 @@
 let TileInner : u32 = 64u;
 var<workgroup> mm_Asub : array<array<f32, 64>, 64>;
 var<workgroup> mm_Bsub : array<array<f32, 64>, 64>;
-[[stage(compute), workgroup_size(16, 16, 1)]]
-fn main([[builtin(local_invocation_id)]] local_id : vec3<u32>,
-        [[builtin(global_invocation_id)]] global_id  : vec3<u32>) {
+@stage(compute) @workgroup_size(16, 16, 1)
+fn main(@builtin(local_invocation_id) local_id : vec3<u32>,
+        @builtin(global_invocation_id) global_id  : vec3<u32>) {
     let tileRow : u32 = local_id.y * RowPerThread;
     let tileCol : u32 = local_id.x * ColPerThread;
 
@@ -120,4 +120,4 @@
                     acc[index]);
     }
     }
-}
\ No newline at end of file
+}
diff --git a/test/bug/tint/914.wgsl.expected.wgsl b/test/bug/tint/914.wgsl.expected.wgsl
index bfa7c61..7d88d77 100644
--- a/test/bug/tint/914.wgsl.expected.wgsl
+++ b/test/bug/tint/914.wgsl.expected.wgsl
@@ -8,13 +8,13 @@
   numbers : array<f32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> firstMatrix : Matrix;
+@group(0) @binding(0) var<storage, read> firstMatrix : Matrix;
 
-[[group(0), binding(1)]] var<storage, read> secondMatrix : Matrix;
+@group(0) @binding(1) var<storage, read> secondMatrix : Matrix;
 
-[[group(0), binding(2)]] var<storage, write> resultMatrix : Matrix;
+@group(0) @binding(2) var<storage, write> resultMatrix : Matrix;
 
-[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;
+@group(0) @binding(3) var<uniform> uniforms : Uniforms;
 
 fn mm_readA(row : u32, col : u32) -> f32 {
   if (((row < uniforms.dimAOuter) && (col < uniforms.dimInner))) {
@@ -53,8 +53,8 @@
 
 var<workgroup> mm_Bsub : array<array<f32, 64>, 64>;
 
-[[stage(compute), workgroup_size(16, 16, 1)]]
-fn main([[builtin(local_invocation_id)]] local_id : vec3<u32>, [[builtin(global_invocation_id)]] global_id : vec3<u32>) {
+@stage(compute) @workgroup_size(16, 16, 1)
+fn main(@builtin(local_invocation_id) local_id : vec3<u32>, @builtin(global_invocation_id) global_id : vec3<u32>) {
   let tileRow : u32 = (local_id.y * RowPerThread);
   let tileCol : u32 = (local_id.x * ColPerThread);
   let globalRow : u32 = (global_id.y * RowPerThread);
diff --git a/test/bug/tint/922.wgsl b/test/bug/tint/922.wgsl
index 0d334f2..450aba1 100644
--- a/test/bug/tint/922.wgsl
+++ b/test/bug/tint/922.wgsl
@@ -21,25 +21,25 @@
 };
 
 struct ub_MaterialParams {
-    u_TexMtx: [[stride(32)]] array<Mat4x2_,1>;
+    u_TexMtx: @stride(32) array<Mat4x2_,1>;
     u_Misc0_: vec4<f32>;
 };
 
 struct ub_PacketParams {
-    u_PosMtx: [[stride(48)]] array<Mat4x3_,32>;
+    u_PosMtx: @stride(48) array<Mat4x3_,32>;
 };
 
 struct VertexOutput {
-    [[location(0)]] v_Color: vec4<f32>;
-    [[location(1)]] v_TexCoord: vec2<f32>;
-    [[builtin(position)]] member: vec4<f32>;
+    @location(0) v_Color: vec4<f32>;
+    @location(1) v_TexCoord: vec2<f32>;
+    @builtin(position) member: vec4<f32>;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> global: ub_SceneParams;
-[[group(0), binding(1)]]
+@group(0) @binding(1)
 var<uniform> global1: ub_MaterialParams;
-[[group(0), binding(2)]]
+@group(0) @binding(2)
 var<uniform> global2: ub_PacketParams;
 var<private> a_Position1: vec3<f32>;
 var<private> a_UV1: vec2<f32>;
@@ -283,8 +283,8 @@
     }
 }
 
-[[stage(vertex)]]
-fn main([[location(0)]] a_Position: vec3<f32>, [[location(1)]] a_UV: vec2<f32>, [[location(2)]] a_Color: vec4<f32>, [[location(3)]] a_Normal: vec3<f32>, [[location(4)]] a_PosMtxIdx: f32) -> VertexOutput {
+@stage(vertex)
+fn main(@location(0) a_Position: vec3<f32>, @location(1) a_UV: vec2<f32>, @location(2) a_Color: vec4<f32>, @location(3) a_Normal: vec3<f32>, @location(4) a_PosMtxIdx: f32) -> VertexOutput {
     a_Position1 = a_Position;
     a_UV1 = a_UV;
     a_Color1 = a_Color;
diff --git a/test/bug/tint/922.wgsl.expected.wgsl b/test/bug/tint/922.wgsl.expected.wgsl
index 82929da..ac8b48c 100644
--- a/test/bug/tint/922.wgsl.expected.wgsl
+++ b/test/bug/tint/922.wgsl.expected.wgsl
@@ -21,28 +21,28 @@
 }
 
 struct ub_MaterialParams {
-  u_TexMtx : [[stride(32)]] array<Mat4x2_, 1>;
+  u_TexMtx : @stride(32) array<Mat4x2_, 1>;
   u_Misc0_ : vec4<f32>;
 }
 
 struct ub_PacketParams {
-  u_PosMtx : [[stride(48)]] array<Mat4x3_, 32>;
+  u_PosMtx : @stride(48) array<Mat4x3_, 32>;
 }
 
 struct VertexOutput {
-  [[location(0)]]
+  @location(0)
   v_Color : vec4<f32>;
-  [[location(1)]]
+  @location(1)
   v_TexCoord : vec2<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   member : vec4<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> global : ub_SceneParams;
+@group(0) @binding(0) var<uniform> global : ub_SceneParams;
 
-[[group(0), binding(1)]] var<uniform> global1 : ub_MaterialParams;
+@group(0) @binding(1) var<uniform> global1 : ub_MaterialParams;
 
-[[group(0), binding(2)]] var<uniform> global2 : ub_PacketParams;
+@group(0) @binding(2) var<uniform> global2 : ub_PacketParams;
 
 var<private> a_Position1 : vec3<f32>;
 
@@ -279,8 +279,8 @@
   }
 }
 
-[[stage(vertex)]]
-fn main([[location(0)]] a_Position : vec3<f32>, [[location(1)]] a_UV : vec2<f32>, [[location(2)]] a_Color : vec4<f32>, [[location(3)]] a_Normal : vec3<f32>, [[location(4)]] a_PosMtxIdx : f32) -> VertexOutput {
+@stage(vertex)
+fn main(@location(0) a_Position : vec3<f32>, @location(1) a_UV : vec2<f32>, @location(2) a_Color : vec4<f32>, @location(3) a_Normal : vec3<f32>, @location(4) a_PosMtxIdx : f32) -> VertexOutput {
   a_Position1 = a_Position;
   a_UV1 = a_UV;
   a_Color1 = a_Color;
diff --git a/test/bug/tint/926.wgsl b/test/bug/tint/926.wgsl
index b308f5a..652d196 100644
--- a/test/bug/tint/926.wgsl
+++ b/test/bug/tint/926.wgsl
@@ -1,12 +1,12 @@
  struct DrawIndirectArgs {
   vertexCount : atomic<u32>;
 };
-[[group(0), binding(5)]] var<storage, read_write> drawOut : DrawIndirectArgs;
+@group(0) @binding(5) var<storage, read_write> drawOut : DrawIndirectArgs;
 
 var<private> cubeVerts : u32 = 0u;
 
-[[stage(compute), workgroup_size(1)]]
-fn computeMain([[builtin(global_invocation_id)]] global_id : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn computeMain(@builtin(global_invocation_id) global_id : vec3<u32>) {
   // Increment cubeVerts based on some criteria...
 
   // This fails SPIR-V validation
diff --git a/test/bug/tint/926.wgsl.expected.wgsl b/test/bug/tint/926.wgsl.expected.wgsl
index 978979b..6af7afb 100644
--- a/test/bug/tint/926.wgsl.expected.wgsl
+++ b/test/bug/tint/926.wgsl.expected.wgsl
@@ -2,11 +2,11 @@
   vertexCount : atomic<u32>;
 }
 
-[[group(0), binding(5)]] var<storage, read_write> drawOut : DrawIndirectArgs;
+@group(0) @binding(5) var<storage, read_write> drawOut : DrawIndirectArgs;
 
 var<private> cubeVerts : u32 = 0u;
 
-[[stage(compute), workgroup_size(1)]]
-fn computeMain([[builtin(global_invocation_id)]] global_id : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn computeMain(@builtin(global_invocation_id) global_id : vec3<u32>) {
   let firstVertex : u32 = atomicAdd(&(drawOut.vertexCount), cubeVerts);
 }
diff --git a/test/bug/tint/942.wgsl b/test/bug/tint/942.wgsl
index eb2ae53..273dc53 100644
--- a/test/bug/tint/942.wgsl
+++ b/test/bug/tint/942.wgsl
@@ -3,15 +3,15 @@
   blockDim : u32;
 };
 
-[[group(0), binding(0)]] var samp : sampler;
-[[group(0), binding(1)]] var<uniform> params : Params;
-[[group(1), binding(1)]] var inputTex : texture_2d<f32>;
-[[group(1), binding(2)]] var outputTex : texture_storage_2d<rgba8unorm, write>;
+@group(0) @binding(0) var samp : sampler;
+@group(0) @binding(1) var<uniform> params : Params;
+@group(1) @binding(1) var inputTex : texture_2d<f32>;
+@group(1) @binding(2) var outputTex : texture_storage_2d<rgba8unorm, write>;
 
  struct Flip {
   value : u32;
 };
-[[group(1), binding(3)]] var<uniform> flip : Flip;
+@group(1) @binding(3) var<uniform> flip : Flip;
 
 // This shader blurs the input texture in one direction, depending on whether
 // |flip.value| is 0 or 1.
@@ -29,10 +29,10 @@
 
 var<workgroup> tile : array<array<vec3<f32>, 256>, 4>;
 
-[[stage(compute), workgroup_size(64, 1, 1)]]
+@stage(compute) @workgroup_size(64, 1, 1)
 fn main(
-  [[builtin(workgroup_id)]] WorkGroupID : vec3<u32>,
-  [[builtin(local_invocation_id)]] LocalInvocationID : vec3<u32>
+  @builtin(workgroup_id) WorkGroupID : vec3<u32>,
+  @builtin(local_invocation_id) LocalInvocationID : vec3<u32>
 ) {
   let filterOffset : u32 = (params.filterDim - 1u) / 2u;
   let dims : vec2<i32> = textureDimensions(inputTex, 0);
diff --git a/test/bug/tint/942.wgsl.expected.wgsl b/test/bug/tint/942.wgsl.expected.wgsl
index 827326f..5fb7d1b 100644
--- a/test/bug/tint/942.wgsl.expected.wgsl
+++ b/test/bug/tint/942.wgsl.expected.wgsl
@@ -3,24 +3,24 @@
   blockDim : u32;
 }
 
-[[group(0), binding(0)]] var samp : sampler;
+@group(0) @binding(0) var samp : sampler;
 
-[[group(0), binding(1)]] var<uniform> params : Params;
+@group(0) @binding(1) var<uniform> params : Params;
 
-[[group(1), binding(1)]] var inputTex : texture_2d<f32>;
+@group(1) @binding(1) var inputTex : texture_2d<f32>;
 
-[[group(1), binding(2)]] var outputTex : texture_storage_2d<rgba8unorm, write>;
+@group(1) @binding(2) var outputTex : texture_storage_2d<rgba8unorm, write>;
 
 struct Flip {
   value : u32;
 }
 
-[[group(1), binding(3)]] var<uniform> flip : Flip;
+@group(1) @binding(3) var<uniform> flip : Flip;
 
 var<workgroup> tile : array<array<vec3<f32>, 256>, 4>;
 
-[[stage(compute), workgroup_size(64, 1, 1)]]
-fn main([[builtin(workgroup_id)]] WorkGroupID : vec3<u32>, [[builtin(local_invocation_id)]] LocalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(64, 1, 1)
+fn main(@builtin(workgroup_id) WorkGroupID : vec3<u32>, @builtin(local_invocation_id) LocalInvocationID : vec3<u32>) {
   let filterOffset : u32 = ((params.filterDim - 1u) / 2u);
   let dims : vec2<i32> = textureDimensions(inputTex, 0);
   let baseIndex = (vec2<i32>(((WorkGroupID.xy * vec2<u32>(params.blockDim, 4u)) + (LocalInvocationID.xy * vec2<u32>(4u, 1u)))) - vec2<i32>(i32(filterOffset), 0));
diff --git a/test/bug/tint/943.spvasm.expected.wgsl b/test/bug/tint/943.spvasm.expected.wgsl
index 04699dd..ea2d6ad 100644
--- a/test/bug/tint/943.spvasm.expected.wgsl
+++ b/test/bug/tint/943.spvasm.expected.wgsl
@@ -1,28 +1,28 @@
 struct Uniforms {
   NAN : f32;
-  [[size(12)]]
+  @size(12)
   padding : u32;
   aShape : vec3<i32>;
-  [[size(4)]]
+  @size(4)
   padding_1 : u32;
   bShape : vec3<i32>;
-  [[size(4)]]
+  @size(4)
   padding_2 : u32;
   outShape : vec3<i32>;
-  [[size(4)]]
+  @size(4)
   padding_3 : u32;
   outShapeStrides : vec2<i32>;
 }
 
-type RTArr = [[stride(4)]] array<f32>;
+type RTArr = @stride(4) array<f32>;
 
-type RTArr_1 = [[stride(4)]] array<f32>;
+type RTArr_1 = @stride(4) array<f32>;
 
 struct ssbOut {
   result : RTArr_1;
 }
 
-type RTArr_2 = [[stride(4)]] array<f32>;
+type RTArr_2 = @stride(4) array<f32>;
 
 struct ssbA {
   A : RTArr_1;
@@ -34,13 +34,13 @@
 
 var<private> dimAOuter_1 : i32;
 
-[[group(0), binding(3)]] var<uniform> x_48 : Uniforms;
+@group(0) @binding(3) var<uniform> x_48 : Uniforms;
 
 var<private> dimInner_1 : i32;
 
 var<private> dimBOuter_1 : i32;
 
-[[group(0), binding(0)]] var<storage, read_write> x_54 : ssbOut;
+@group(0) @binding(0) var<storage, read_write> x_54 : ssbOut;
 
 var<private> gl_LocalInvocationID : vec3<u32>;
 
@@ -50,11 +50,11 @@
 
 var<workgroup> mm_Bsub : array<array<f32, 1u>, 64u>;
 
-[[group(0), binding(1)]] var<storage, read> x_165 : ssbA;
+@group(0) @binding(1) var<storage, read> x_165 : ssbA;
 
 var<private> batch : i32;
 
-[[group(0), binding(2)]] var<storage, read> x_185 : ssbB;
+@group(0) @binding(2) var<storage, read> x_185 : ssbB;
 
 fn coordsInBounds_vi2_vi2_(coord : ptr<function, vec2<i32>>, shape : ptr<function, vec2<i32>>) -> bool {
   var x_87 : bool;
@@ -514,8 +514,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 64, 1)]]
-fn main([[builtin(local_invocation_id)]] gl_LocalInvocationID_param : vec3<u32>, [[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 64, 1)
+fn main(@builtin(local_invocation_id) gl_LocalInvocationID_param : vec3<u32>, @builtin(global_invocation_id) gl_GlobalInvocationID_param : vec3<u32>) {
   gl_LocalInvocationID = gl_LocalInvocationID_param;
   gl_GlobalInvocationID = gl_GlobalInvocationID_param;
   main_1();
diff --git a/test/bug/tint/948.wgsl b/test/bug/tint/948.wgsl
index 99056b4..e07fab9 100644
--- a/test/bug/tint/948.wgsl
+++ b/test/bug/tint/948.wgsl
@@ -1,6 +1,6 @@
 struct LeftOver {
   time : f32;
-  [[size(12)]]
+  @size(12)
   padding : u32;
   worldViewProjection : mat4x4<f32>;
   outputSize : vec2<f32>;
@@ -11,29 +11,29 @@
   colorMul : vec3<f32>;
 };
 
-[[group(2), binding(9)]] var<uniform> x_20 : LeftOver;
+@group(2) @binding(9) var<uniform> x_20 : LeftOver;
 
-[[group(2), binding(3)]] var frameMapTexture : texture_2d<f32>;
+@group(2) @binding(3) var frameMapTexture : texture_2d<f32>;
 
-[[group(2), binding(2)]] var frameMapSampler : sampler;
+@group(2) @binding(2) var frameMapSampler : sampler;
 
 var<private> tUV : vec2<f32>;
 
-[[group(2), binding(5)]] var tileMapsTexture0 : texture_2d<f32>;
+@group(2) @binding(5) var tileMapsTexture0 : texture_2d<f32>;
 
-[[group(2), binding(4)]] var tileMapsSampler : sampler;
+@group(2) @binding(4) var tileMapsSampler : sampler;
 
-[[group(2), binding(6)]] var tileMapsTexture1 : texture_2d<f32>;
+@group(2) @binding(6) var tileMapsTexture1 : texture_2d<f32>;
 
-[[group(2), binding(8)]] var animationMapTexture : texture_2d<f32>;
+@group(2) @binding(8) var animationMapTexture : texture_2d<f32>;
 
-[[group(2), binding(7)]] var animationMapSampler : sampler;
+@group(2) @binding(7) var animationMapSampler : sampler;
 
 var<private> mt : f32;
 
-[[group(2), binding(1)]] var spriteSheetTexture : texture_2d<f32>;
+@group(2) @binding(1) var spriteSheetTexture : texture_2d<f32>;
 
-[[group(2), binding(0)]] var spriteSheetSampler : sampler;
+@group(2) @binding(0) var spriteSheetSampler : sampler;
 
 var<private> glFragColor : vec4<f32>;
 
@@ -211,12 +211,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   glFragColor_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[location(2)]] tUV_param : vec2<f32>, [[location(5)]] tileID_1_param : vec2<f32>, [[location(4)]] levelUnits_param : vec2<f32>, [[location(3)]] stageUnits_1_param : vec2<f32>, [[location(0)]] vPosition_param : vec3<f32>, [[location(1)]] vUV_param : vec2<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(2) tUV_param : vec2<f32>, @location(5) tileID_1_param : vec2<f32>, @location(4) levelUnits_param : vec2<f32>, @location(3) stageUnits_1_param : vec2<f32>, @location(0) vPosition_param : vec3<f32>, @location(1) vUV_param : vec2<f32>) -> main_out {
   tUV = tUV_param;
   tileID_1 = tileID_1_param;
   levelUnits = levelUnits_param;
@@ -225,4 +225,4 @@
   vUV = vUV_param;
   main_1();
   return main_out(glFragColor);
-}
\ No newline at end of file
+}
diff --git a/test/bug/tint/948.wgsl.expected.wgsl b/test/bug/tint/948.wgsl.expected.wgsl
index d6a66db..8a4fc7e 100644
--- a/test/bug/tint/948.wgsl.expected.wgsl
+++ b/test/bug/tint/948.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct LeftOver {
   time : f32;
-  [[size(12)]]
+  @size(12)
   padding : u32;
   worldViewProjection : mat4x4<f32>;
   outputSize : vec2<f32>;
@@ -11,29 +11,29 @@
   colorMul : vec3<f32>;
 }
 
-[[group(2), binding(9)]] var<uniform> x_20 : LeftOver;
+@group(2) @binding(9) var<uniform> x_20 : LeftOver;
 
-[[group(2), binding(3)]] var frameMapTexture : texture_2d<f32>;
+@group(2) @binding(3) var frameMapTexture : texture_2d<f32>;
 
-[[group(2), binding(2)]] var frameMapSampler : sampler;
+@group(2) @binding(2) var frameMapSampler : sampler;
 
 var<private> tUV : vec2<f32>;
 
-[[group(2), binding(5)]] var tileMapsTexture0 : texture_2d<f32>;
+@group(2) @binding(5) var tileMapsTexture0 : texture_2d<f32>;
 
-[[group(2), binding(4)]] var tileMapsSampler : sampler;
+@group(2) @binding(4) var tileMapsSampler : sampler;
 
-[[group(2), binding(6)]] var tileMapsTexture1 : texture_2d<f32>;
+@group(2) @binding(6) var tileMapsTexture1 : texture_2d<f32>;
 
-[[group(2), binding(8)]] var animationMapTexture : texture_2d<f32>;
+@group(2) @binding(8) var animationMapTexture : texture_2d<f32>;
 
-[[group(2), binding(7)]] var animationMapSampler : sampler;
+@group(2) @binding(7) var animationMapSampler : sampler;
 
 var<private> mt : f32;
 
-[[group(2), binding(1)]] var spriteSheetTexture : texture_2d<f32>;
+@group(2) @binding(1) var spriteSheetTexture : texture_2d<f32>;
 
-[[group(2), binding(0)]] var spriteSheetSampler : sampler;
+@group(2) @binding(0) var spriteSheetSampler : sampler;
 
 var<private> glFragColor : vec4<f32>;
 
@@ -211,12 +211,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   glFragColor_1 : vec4<f32>;
 }
 
-[[stage(fragment)]]
-fn main([[location(2)]] tUV_param : vec2<f32>, [[location(5)]] tileID_1_param : vec2<f32>, [[location(4)]] levelUnits_param : vec2<f32>, [[location(3)]] stageUnits_1_param : vec2<f32>, [[location(0)]] vPosition_param : vec3<f32>, [[location(1)]] vUV_param : vec2<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(2) tUV_param : vec2<f32>, @location(5) tileID_1_param : vec2<f32>, @location(4) levelUnits_param : vec2<f32>, @location(3) stageUnits_1_param : vec2<f32>, @location(0) vPosition_param : vec3<f32>, @location(1) vUV_param : vec2<f32>) -> main_out {
   tUV = tUV_param;
   tileID_1 = tileID_1_param;
   levelUnits = levelUnits_param;
diff --git a/test/bug/tint/949.wgsl b/test/bug/tint/949.wgsl
index 2d52b91..86ca7fc 100644
--- a/test/bug/tint/949.wgsl
+++ b/test/bug/tint/949.wgsl
@@ -8,12 +8,12 @@
   u_World : mat4x4<f32>;
   u_ViewProjection : mat4x4<f32>;
   u_bumpStrength : f32;
-  [[size(12)]]
+  @size(12)
   padding : u32;
   u_cameraPosition : vec3<f32>;
   u_parallaxScale : f32;
   textureInfoName : f32;
-  [[size(4)]]
+  @size(4)
   padding_1 : u32;
   tangentSpaceParameter0 : vec2<f32>;
 };
@@ -23,7 +23,7 @@
   vLightDiffuse : vec4<f32>;
   vLightSpecular : vec4<f32>;
   vLightGround : vec3<f32>;
-  [[size(4)]]
+  @size(4)
   padding_2 : u32;
   shadowsInfo : vec4<f32>;
   depthValues : vec2<f32>;
@@ -33,13 +33,13 @@
 
 var<private> u_Color : vec3<f32>;
 
-[[group(2), binding(1)]] var TextureSamplerTexture : texture_2d<f32>;
+@group(2) @binding(1) var TextureSamplerTexture : texture_2d<f32>;
 
-[[group(2), binding(0)]] var TextureSamplerSampler : sampler;
+@group(2) @binding(0) var TextureSamplerSampler : sampler;
 
 var<private> vMainuv : vec2<f32>;
 
-[[group(2), binding(6)]] var<uniform> x_269 : LeftOver;
+@group(2) @binding(6) var<uniform> x_269 : LeftOver;
 
 var<private> v_output1 : vec4<f32>;
 
@@ -49,17 +49,17 @@
 
 var<private> v_output2 : vec4<f32>;
 
-[[group(2), binding(3)]] var TextureSampler1Texture : texture_2d<f32>;
+@group(2) @binding(3) var TextureSampler1Texture : texture_2d<f32>;
 
-[[group(2), binding(2)]] var TextureSampler1Sampler : sampler;
+@group(2) @binding(2) var TextureSampler1Sampler : sampler;
 
-[[group(0), binding(5)]] var<uniform> light0 : Light0;
+@group(0) @binding(5) var<uniform> light0 : Light0;
 
 var<private> glFragColor : vec4<f32>;
 
-[[group(2), binding(4)]] var bumpSamplerSampler : sampler;
+@group(2) @binding(4) var bumpSamplerSampler : sampler;
 
-[[group(2), binding(5)]] var bumpSamplerTexture : texture_2d<f32>;
+@group(2) @binding(5) var bumpSamplerTexture : texture_2d<f32>;
 
 fn cotangent_frame_vf3_vf3_vf2_vf2_(normal_1 : ptr<function, vec3<f32>>, p : ptr<function, vec3<f32>>, uv : ptr<function, vec2<f32>>, tangentSpaceParams : ptr<function, vec2<f32>>) -> mat3x3<f32> {
   var dp1 : vec3<f32>;
@@ -437,12 +437,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   glFragColor_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[location(1)]] vMainuv_param : vec2<f32>, [[location(0)]] v_output1_param : vec4<f32>, [[builtin(front_facing)]] gl_FrontFacing_param : bool, [[location(3)]] v_uv_param : vec2<f32>, [[location(2)]] v_output2_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(1) vMainuv_param : vec2<f32>, @location(0) v_output1_param : vec4<f32>, @builtin(front_facing) gl_FrontFacing_param : bool, @location(3) v_uv_param : vec2<f32>, @location(2) v_output2_param : vec4<f32>) -> main_out {
   vMainuv = vMainuv_param;
   v_output1 = v_output1_param;
   gl_FrontFacing = gl_FrontFacing_param;
@@ -450,4 +450,4 @@
   v_output2 = v_output2_param;
   main_1();
   return main_out(glFragColor);
-}
\ No newline at end of file
+}
diff --git a/test/bug/tint/949.wgsl.expected.wgsl b/test/bug/tint/949.wgsl.expected.wgsl
index 8bbc807..e374119 100644
--- a/test/bug/tint/949.wgsl.expected.wgsl
+++ b/test/bug/tint/949.wgsl.expected.wgsl
@@ -7,12 +7,12 @@
   u_World : mat4x4<f32>;
   u_ViewProjection : mat4x4<f32>;
   u_bumpStrength : f32;
-  [[size(12)]]
+  @size(12)
   padding : u32;
   u_cameraPosition : vec3<f32>;
   u_parallaxScale : f32;
   textureInfoName : f32;
-  [[size(4)]]
+  @size(4)
   padding_1 : u32;
   tangentSpaceParameter0 : vec2<f32>;
 }
@@ -22,7 +22,7 @@
   vLightDiffuse : vec4<f32>;
   vLightSpecular : vec4<f32>;
   vLightGround : vec3<f32>;
-  [[size(4)]]
+  @size(4)
   padding_2 : u32;
   shadowsInfo : vec4<f32>;
   depthValues : vec2<f32>;
@@ -32,13 +32,13 @@
 
 var<private> u_Color : vec3<f32>;
 
-[[group(2), binding(1)]] var TextureSamplerTexture : texture_2d<f32>;
+@group(2) @binding(1) var TextureSamplerTexture : texture_2d<f32>;
 
-[[group(2), binding(0)]] var TextureSamplerSampler : sampler;
+@group(2) @binding(0) var TextureSamplerSampler : sampler;
 
 var<private> vMainuv : vec2<f32>;
 
-[[group(2), binding(6)]] var<uniform> x_269 : LeftOver;
+@group(2) @binding(6) var<uniform> x_269 : LeftOver;
 
 var<private> v_output1 : vec4<f32>;
 
@@ -48,17 +48,17 @@
 
 var<private> v_output2 : vec4<f32>;
 
-[[group(2), binding(3)]] var TextureSampler1Texture : texture_2d<f32>;
+@group(2) @binding(3) var TextureSampler1Texture : texture_2d<f32>;
 
-[[group(2), binding(2)]] var TextureSampler1Sampler : sampler;
+@group(2) @binding(2) var TextureSampler1Sampler : sampler;
 
-[[group(0), binding(5)]] var<uniform> light0 : Light0;
+@group(0) @binding(5) var<uniform> light0 : Light0;
 
 var<private> glFragColor : vec4<f32>;
 
-[[group(2), binding(4)]] var bumpSamplerSampler : sampler;
+@group(2) @binding(4) var bumpSamplerSampler : sampler;
 
-[[group(2), binding(5)]] var bumpSamplerTexture : texture_2d<f32>;
+@group(2) @binding(5) var bumpSamplerTexture : texture_2d<f32>;
 
 fn cotangent_frame_vf3_vf3_vf2_vf2_(normal_1 : ptr<function, vec3<f32>>, p : ptr<function, vec3<f32>>, uv : ptr<function, vec2<f32>>, tangentSpaceParams : ptr<function, vec2<f32>>) -> mat3x3<f32> {
   var dp1 : vec3<f32>;
@@ -436,12 +436,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   glFragColor_1 : vec4<f32>;
 }
 
-[[stage(fragment)]]
-fn main([[location(1)]] vMainuv_param : vec2<f32>, [[location(0)]] v_output1_param : vec4<f32>, [[builtin(front_facing)]] gl_FrontFacing_param : bool, [[location(3)]] v_uv_param : vec2<f32>, [[location(2)]] v_output2_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(1) vMainuv_param : vec2<f32>, @location(0) v_output1_param : vec4<f32>, @builtin(front_facing) gl_FrontFacing_param : bool, @location(3) v_uv_param : vec2<f32>, @location(2) v_output2_param : vec4<f32>) -> main_out {
   vMainuv = vMainuv_param;
   v_output1 = v_output1_param;
   gl_FrontFacing = gl_FrontFacing_param;
diff --git a/test/bug/tint/951.spvasm.expected.wgsl b/test/bug/tint/951.spvasm.expected.wgsl
index f80adea..63fd79e 100644
--- a/test/bug/tint/951.spvasm.expected.wgsl
+++ b/test/bug/tint/951.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
-type RTArr = [[stride(4)]] array<f32>;
+type RTArr = @stride(4) array<f32>;
 
-type RTArr_1 = [[stride(4)]] array<f32>;
+type RTArr_1 = @stride(4) array<f32>;
 
 struct ssbOut {
   result : RTArr_1;
@@ -18,13 +18,13 @@
   size : i32;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> x_16 : ssbOut;
+@group(0) @binding(0) var<storage, read_write> x_16 : ssbOut;
 
-[[group(0), binding(1)]] var<storage, read> x_20 : ssbA;
+@group(0) @binding(1) var<storage, read> x_20 : ssbA;
 
 var<private> gl_GlobalInvocationID : vec3<u32>;
 
-[[group(0), binding(2)]] var<uniform> x_24 : Uniforms;
+@group(0) @binding(2) var<uniform> x_24 : Uniforms;
 
 fn getAAtOutCoords_() -> f32 {
   let x_42 : u32 = gl_GlobalInvocationID.x;
@@ -72,8 +72,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(128, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(128, 1, 1)
+fn main(@builtin(global_invocation_id) gl_GlobalInvocationID_param : vec3<u32>) {
   gl_GlobalInvocationID = gl_GlobalInvocationID_param;
   main_1();
 }
diff --git a/test/bug/tint/959.wgsl b/test/bug/tint/959.wgsl
index f8feea2..244775a 100644
--- a/test/bug/tint/959.wgsl
+++ b/test/bug/tint/959.wgsl
@@ -7,58 +7,58 @@
   a : f32;
 };
 
-[[group(0),  binding(0)]] var<storage> b0  : S;
-[[group(1),  binding(0)]] var<storage> b1  : S;
-[[group(2),  binding(0)]] var<storage> b2  : S;
-[[group(3),  binding(0)]] var<storage> b3  : S;
-[[group(4),  binding(0)]] var<storage> b4  : S;
-[[group(5),  binding(0)]] var<storage> b5  : S;
-[[group(6),  binding(0)]] var<storage> b6  : S;
-[[group(7),  binding(0)]] var<storage> b7  : S;
-[[group(9),  binding(1)]] var<uniform> b8  : S;
-[[group(8),  binding(1)]] var<uniform> b9  : S;
-[[group(10), binding(1)]] var<uniform> b10 : S;
-[[group(11), binding(1)]] var<uniform> b11 : S;
-[[group(12), binding(1)]] var<uniform> b12 : S;
-[[group(13), binding(1)]] var<uniform> b13 : S;
-[[group(14), binding(1)]] var<uniform> b14 : S;
-[[group(15), binding(1)]] var<uniform> b15 : S;
+@group(0)  @binding(0) var<storage> b0  : S;
+@group(1)  @binding(0) var<storage> b1  : S;
+@group(2)  @binding(0) var<storage> b2  : S;
+@group(3)  @binding(0) var<storage> b3  : S;
+@group(4)  @binding(0) var<storage> b4  : S;
+@group(5)  @binding(0) var<storage> b5  : S;
+@group(6)  @binding(0) var<storage> b6  : S;
+@group(7)  @binding(0) var<storage> b7  : S;
+@group(9)  @binding(1) var<uniform> b8  : S;
+@group(8)  @binding(1) var<uniform> b9  : S;
+@group(10) @binding(1) var<uniform> b10 : S;
+@group(11) @binding(1) var<uniform> b11 : S;
+@group(12) @binding(1) var<uniform> b12 : S;
+@group(13) @binding(1) var<uniform> b13 : S;
+@group(14) @binding(1) var<uniform> b14 : S;
+@group(15) @binding(1) var<uniform> b15 : S;
 
-[[group(0),  binding(1)]] var t0  : texture_2d<f32>;
-[[group(1),  binding(1)]] var t1  : texture_2d<f32>;
-[[group(2),  binding(1)]] var t2  : texture_2d<f32>;
-[[group(3),  binding(1)]] var t3  : texture_2d<f32>;
-[[group(4),  binding(1)]] var t4  : texture_2d<f32>;
-[[group(5),  binding(1)]] var t5  : texture_2d<f32>;
-[[group(6),  binding(1)]] var t6  : texture_2d<f32>;
-[[group(7),  binding(1)]] var t7  : texture_2d<f32>;
-[[group(8),  binding(200)]] var t8  : texture_depth_2d;
-[[group(9),  binding(200)]] var t9  : texture_depth_2d;
-[[group(10), binding(200)]] var t10 : texture_depth_2d;
-[[group(11), binding(200)]] var t11 : texture_depth_2d;
-[[group(12), binding(200)]] var t12 : texture_depth_2d;
-[[group(13), binding(200)]] var t13 : texture_depth_2d;
-[[group(14), binding(200)]] var t14 : texture_depth_2d;
-[[group(15), binding(200)]] var t15 : texture_depth_2d;
+@group(0)  @binding(1) var t0  : texture_2d<f32>;
+@group(1)  @binding(1) var t1  : texture_2d<f32>;
+@group(2)  @binding(1) var t2  : texture_2d<f32>;
+@group(3)  @binding(1) var t3  : texture_2d<f32>;
+@group(4)  @binding(1) var t4  : texture_2d<f32>;
+@group(5)  @binding(1) var t5  : texture_2d<f32>;
+@group(6)  @binding(1) var t6  : texture_2d<f32>;
+@group(7)  @binding(1) var t7  : texture_2d<f32>;
+@group(8)  @binding(200) var t8  : texture_depth_2d;
+@group(9)  @binding(200) var t9  : texture_depth_2d;
+@group(10) @binding(200) var t10 : texture_depth_2d;
+@group(11) @binding(200) var t11 : texture_depth_2d;
+@group(12) @binding(200) var t12 : texture_depth_2d;
+@group(13) @binding(200) var t13 : texture_depth_2d;
+@group(14) @binding(200) var t14 : texture_depth_2d;
+@group(15) @binding(200) var t15 : texture_depth_2d;
 
-[[group(0),  binding(200)]] var s0 : sampler;
-[[group(1),  binding(200)]] var s1 : sampler;
-[[group(2),  binding(200)]] var s2 : sampler;
-[[group(3),  binding(200)]] var s3 : sampler;
-[[group(4),  binding(200)]] var s4 : sampler;
-[[group(5),  binding(200)]] var s5 : sampler;
-[[group(6),  binding(200)]] var s6 : sampler;
-[[group(7),  binding(200)]] var s7 : sampler;
-[[group(8),  binding(300)]] var s8 : sampler_comparison;
-[[group(9),  binding(300)]] var s9 : sampler_comparison;
-[[group(10), binding(300)]] var s10 : sampler_comparison;
-[[group(11), binding(300)]] var s11 : sampler_comparison;
-[[group(12), binding(300)]] var s12 : sampler_comparison;
-[[group(13), binding(300)]] var s13 : sampler_comparison;
-[[group(14), binding(300)]] var s14 : sampler_comparison;
-[[group(15), binding(300)]] var s15 : sampler_comparison;
+@group(0)  @binding(200) var s0 : sampler;
+@group(1)  @binding(200) var s1 : sampler;
+@group(2)  @binding(200) var s2 : sampler;
+@group(3)  @binding(200) var s3 : sampler;
+@group(4)  @binding(200) var s4 : sampler;
+@group(5)  @binding(200) var s5 : sampler;
+@group(6)  @binding(200) var s6 : sampler;
+@group(7)  @binding(200) var s7 : sampler;
+@group(8)  @binding(300) var s8 : sampler_comparison;
+@group(9)  @binding(300) var s9 : sampler_comparison;
+@group(10) @binding(300) var s10 : sampler_comparison;
+@group(11) @binding(300) var s11 : sampler_comparison;
+@group(12) @binding(300) var s12 : sampler_comparison;
+@group(13) @binding(300) var s13 : sampler_comparison;
+@group(14) @binding(300) var s14 : sampler_comparison;
+@group(15) @binding(300) var s15 : sampler_comparison;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   _ = b0;
   _ = b1;
diff --git a/test/bug/tint/959.wgsl.expected.wgsl b/test/bug/tint/959.wgsl.expected.wgsl
index 4e4ecf0..7ccfbb9 100644
--- a/test/bug/tint/959.wgsl.expected.wgsl
+++ b/test/bug/tint/959.wgsl.expected.wgsl
@@ -2,103 +2,103 @@
   a : f32;
 }
 
-[[group(0), binding(0)]] var<storage> b0 : S;
+@group(0) @binding(0) var<storage> b0 : S;
 
-[[group(1), binding(0)]] var<storage> b1 : S;
+@group(1) @binding(0) var<storage> b1 : S;
 
-[[group(2), binding(0)]] var<storage> b2 : S;
+@group(2) @binding(0) var<storage> b2 : S;
 
-[[group(3), binding(0)]] var<storage> b3 : S;
+@group(3) @binding(0) var<storage> b3 : S;
 
-[[group(4), binding(0)]] var<storage> b4 : S;
+@group(4) @binding(0) var<storage> b4 : S;
 
-[[group(5), binding(0)]] var<storage> b5 : S;
+@group(5) @binding(0) var<storage> b5 : S;
 
-[[group(6), binding(0)]] var<storage> b6 : S;
+@group(6) @binding(0) var<storage> b6 : S;
 
-[[group(7), binding(0)]] var<storage> b7 : S;
+@group(7) @binding(0) var<storage> b7 : S;
 
-[[group(9), binding(1)]] var<uniform> b8 : S;
+@group(9) @binding(1) var<uniform> b8 : S;
 
-[[group(8), binding(1)]] var<uniform> b9 : S;
+@group(8) @binding(1) var<uniform> b9 : S;
 
-[[group(10), binding(1)]] var<uniform> b10 : S;
+@group(10) @binding(1) var<uniform> b10 : S;
 
-[[group(11), binding(1)]] var<uniform> b11 : S;
+@group(11) @binding(1) var<uniform> b11 : S;
 
-[[group(12), binding(1)]] var<uniform> b12 : S;
+@group(12) @binding(1) var<uniform> b12 : S;
 
-[[group(13), binding(1)]] var<uniform> b13 : S;
+@group(13) @binding(1) var<uniform> b13 : S;
 
-[[group(14), binding(1)]] var<uniform> b14 : S;
+@group(14) @binding(1) var<uniform> b14 : S;
 
-[[group(15), binding(1)]] var<uniform> b15 : S;
+@group(15) @binding(1) var<uniform> b15 : S;
 
-[[group(0), binding(1)]] var t0 : texture_2d<f32>;
+@group(0) @binding(1) var t0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var t1 : texture_2d<f32>;
+@group(1) @binding(1) var t1 : texture_2d<f32>;
 
-[[group(2), binding(1)]] var t2 : texture_2d<f32>;
+@group(2) @binding(1) var t2 : texture_2d<f32>;
 
-[[group(3), binding(1)]] var t3 : texture_2d<f32>;
+@group(3) @binding(1) var t3 : texture_2d<f32>;
 
-[[group(4), binding(1)]] var t4 : texture_2d<f32>;
+@group(4) @binding(1) var t4 : texture_2d<f32>;
 
-[[group(5), binding(1)]] var t5 : texture_2d<f32>;
+@group(5) @binding(1) var t5 : texture_2d<f32>;
 
-[[group(6), binding(1)]] var t6 : texture_2d<f32>;
+@group(6) @binding(1) var t6 : texture_2d<f32>;
 
-[[group(7), binding(1)]] var t7 : texture_2d<f32>;
+@group(7) @binding(1) var t7 : texture_2d<f32>;
 
-[[group(8), binding(200)]] var t8 : texture_depth_2d;
+@group(8) @binding(200) var t8 : texture_depth_2d;
 
-[[group(9), binding(200)]] var t9 : texture_depth_2d;
+@group(9) @binding(200) var t9 : texture_depth_2d;
 
-[[group(10), binding(200)]] var t10 : texture_depth_2d;
+@group(10) @binding(200) var t10 : texture_depth_2d;
 
-[[group(11), binding(200)]] var t11 : texture_depth_2d;
+@group(11) @binding(200) var t11 : texture_depth_2d;
 
-[[group(12), binding(200)]] var t12 : texture_depth_2d;
+@group(12) @binding(200) var t12 : texture_depth_2d;
 
-[[group(13), binding(200)]] var t13 : texture_depth_2d;
+@group(13) @binding(200) var t13 : texture_depth_2d;
 
-[[group(14), binding(200)]] var t14 : texture_depth_2d;
+@group(14) @binding(200) var t14 : texture_depth_2d;
 
-[[group(15), binding(200)]] var t15 : texture_depth_2d;
+@group(15) @binding(200) var t15 : texture_depth_2d;
 
-[[group(0), binding(200)]] var s0 : sampler;
+@group(0) @binding(200) var s0 : sampler;
 
-[[group(1), binding(200)]] var s1 : sampler;
+@group(1) @binding(200) var s1 : sampler;
 
-[[group(2), binding(200)]] var s2 : sampler;
+@group(2) @binding(200) var s2 : sampler;
 
-[[group(3), binding(200)]] var s3 : sampler;
+@group(3) @binding(200) var s3 : sampler;
 
-[[group(4), binding(200)]] var s4 : sampler;
+@group(4) @binding(200) var s4 : sampler;
 
-[[group(5), binding(200)]] var s5 : sampler;
+@group(5) @binding(200) var s5 : sampler;
 
-[[group(6), binding(200)]] var s6 : sampler;
+@group(6) @binding(200) var s6 : sampler;
 
-[[group(7), binding(200)]] var s7 : sampler;
+@group(7) @binding(200) var s7 : sampler;
 
-[[group(8), binding(300)]] var s8 : sampler_comparison;
+@group(8) @binding(300) var s8 : sampler_comparison;
 
-[[group(9), binding(300)]] var s9 : sampler_comparison;
+@group(9) @binding(300) var s9 : sampler_comparison;
 
-[[group(10), binding(300)]] var s10 : sampler_comparison;
+@group(10) @binding(300) var s10 : sampler_comparison;
 
-[[group(11), binding(300)]] var s11 : sampler_comparison;
+@group(11) @binding(300) var s11 : sampler_comparison;
 
-[[group(12), binding(300)]] var s12 : sampler_comparison;
+@group(12) @binding(300) var s12 : sampler_comparison;
 
-[[group(13), binding(300)]] var s13 : sampler_comparison;
+@group(13) @binding(300) var s13 : sampler_comparison;
 
-[[group(14), binding(300)]] var s14 : sampler_comparison;
+@group(14) @binding(300) var s14 : sampler_comparison;
 
-[[group(15), binding(300)]] var s15 : sampler_comparison;
+@group(15) @binding(300) var s15 : sampler_comparison;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   _ = b0;
   _ = b1;
diff --git a/test/bug/tint/977.spvasm.expected.wgsl b/test/bug/tint/977.spvasm.expected.wgsl
index 69bc7aa..8b5ad53 100644
--- a/test/bug/tint/977.spvasm.expected.wgsl
+++ b/test/bug/tint/977.spvasm.expected.wgsl
@@ -1,12 +1,12 @@
-type RTArr = [[stride(4)]] array<f32>;
+type RTArr = @stride(4) array<f32>;
 
-type RTArr_1 = [[stride(4)]] array<f32>;
+type RTArr_1 = @stride(4) array<f32>;
 
 struct ResultMatrix {
   numbers : RTArr_1;
 }
 
-type RTArr_2 = [[stride(4)]] array<f32>;
+type RTArr_2 = @stride(4) array<f32>;
 
 struct FirstMatrix {
   numbers : RTArr_1;
@@ -24,13 +24,13 @@
 
 var<private> gl_GlobalInvocationID : vec3<u32>;
 
-[[group(0), binding(2)]] var<storage, read_write> resultMatrix : ResultMatrix;
+@group(0) @binding(2) var<storage, read_write> resultMatrix : ResultMatrix;
 
-[[group(0), binding(0)]] var<storage, read> firstMatrix : FirstMatrix;
+@group(0) @binding(0) var<storage, read> firstMatrix : FirstMatrix;
 
-[[group(0), binding(1)]] var<storage, read> secondMatrix : SecondMatrix;
+@group(0) @binding(1) var<storage, read> secondMatrix : SecondMatrix;
 
-[[group(0), binding(3)]] var<uniform> x_46 : Uniforms;
+@group(0) @binding(3) var<uniform> x_46 : Uniforms;
 
 fn binaryOperation_f1_f1_(a : ptr<function, f32>, b : ptr<function, f32>) -> f32 {
   var x_26 : f32;
@@ -69,8 +69,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) gl_GlobalInvocationID_param : vec3<u32>) {
   gl_GlobalInvocationID = gl_GlobalInvocationID_param;
   main_1();
 }
diff --git a/test/bug/tint/978.wgsl b/test/bug/tint/978.wgsl
index 278655e..c4b25a1 100644
--- a/test/bug/tint/978.wgsl
+++ b/test/bug/tint/978.wgsl
@@ -1,20 +1,20 @@
 
 struct FragmentInput
 {
-	[[ location( 2 ) ]] vUv : vec2<f32>;
+	@location(2) vUv : vec2<f32>;
 };
 
 struct FragmentOutput
 {
-	[[ location( 0 ) ]] color : vec4<f32>;
+	@location(0) color : vec4<f32>;
 };
 
-[[ binding( 5 ), group( 1 ) ]] var depthMap : texture_depth_2d;
+@binding(5) @group(1) var depthMap : texture_depth_2d;
 
-[[ binding( 3 ), group( 1 ) ]] var texSampler : sampler;
+@binding(3) @group(1) var texSampler : sampler;
 
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main( fIn : FragmentInput ) -> FragmentOutput
 {
     let sample : f32 = textureSample( depthMap , texSampler, fIn.vUv );
diff --git a/test/bug/tint/978.wgsl.expected.wgsl b/test/bug/tint/978.wgsl.expected.wgsl
index b73a26e..8588fe7 100644
--- a/test/bug/tint/978.wgsl.expected.wgsl
+++ b/test/bug/tint/978.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct FragmentInput {
-  [[location(2)]]
+  @location(2)
   vUv : vec2<f32>;
 }
 
 struct FragmentOutput {
-  [[location(0)]]
+  @location(0)
   color : vec4<f32>;
 }
 
-[[binding(5), group(1)]] var depthMap : texture_depth_2d;
+@binding(5) @group(1) var depthMap : texture_depth_2d;
 
-[[binding(3), group(1)]] var texSampler : sampler;
+@binding(3) @group(1) var texSampler : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(fIn : FragmentInput) -> FragmentOutput {
   let sample : f32 = textureSample(depthMap, texSampler, fIn.vUv);
   let color : vec3<f32> = vec3<f32>(sample, sample, sample);
diff --git a/test/bug/tint/980.wgsl b/test/bug/tint/980.wgsl
index bd82785..3f399b0 100644
--- a/test/bug/tint/980.wgsl
+++ b/test/bug/tint/980.wgsl
@@ -6,8 +6,8 @@
 }
 
  struct S { v : vec3<f32>; i : u32; };
-[[binding(0), group(0)]] var<storage, read_write> io : S;
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@binding(0) @group(0) var<storage, read_write> io : S;
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
     io.v = Bad(io.i, io.v);
 }
diff --git a/test/bug/tint/980.wgsl.expected.wgsl b/test/bug/tint/980.wgsl.expected.wgsl
index b74a7cb..ef89fd0 100644
--- a/test/bug/tint/980.wgsl.expected.wgsl
+++ b/test/bug/tint/980.wgsl.expected.wgsl
@@ -9,9 +9,9 @@
   i : u32;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> io : S;
+@binding(0) @group(0) var<storage, read_write> io : S;
 
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_index) idx : u32) {
   io.v = Bad(io.i, io.v);
 }
diff --git a/test/bug/tint/992.wgsl b/test/bug/tint/992.wgsl
index e60c597..461e17c 100644
--- a/test/bug/tint/992.wgsl
+++ b/test/bug/tint/992.wgsl
@@ -1,5 +1,5 @@
-[[stage(fragment)]]
-fn frag_main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main() -> @location(0) vec4<f32> {
     var b: f32 = 0.0;
     var v: vec3<f32> = vec3<f32>(b);
     return vec4<f32>(v, 1.0);
diff --git a/test/bug/tint/992.wgsl.expected.wgsl b/test/bug/tint/992.wgsl.expected.wgsl
index 7354604..1742838 100644
--- a/test/bug/tint/992.wgsl.expected.wgsl
+++ b/test/bug/tint/992.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
-[[stage(fragment)]]
-fn frag_main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main() -> @location(0) vec4<f32> {
   var b : f32 = 0.0;
   var v : vec3<f32> = vec3<f32>(b);
   return vec4<f32>(v, 1.0);
diff --git a/test/bug/tint/993.wgsl b/test/bug/tint/993.wgsl
index cf774f7..b5ebe30 100644
--- a/test/bug/tint/993.wgsl
+++ b/test/bug/tint/993.wgsl
@@ -2,23 +2,23 @@
  struct Constants {
   zero: u32;
 };
-[[group(1), binding(0)]] var<uniform> constants: Constants;
+@group(1) @binding(0) var<uniform> constants: Constants;
 
  struct Result {
   value: u32;
 };
-[[group(1), binding(1)]] var<storage, write> result: Result;
+@group(1) @binding(1) var<storage, write> result: Result;
 
  struct TestData {
   data: array<atomic<i32>,3>;
 };
-[[group(0), binding(0)]] var<storage, read_write> s: TestData;
+@group(0) @binding(0) var<storage, read_write> s: TestData;
 
 fn runTest() -> i32 {
   return atomicLoad(&s.data[(0u) + u32(constants.zero)]);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   result.value = u32(runTest());
-}
\ No newline at end of file
+}
diff --git a/test/bug/tint/993.wgsl.expected.wgsl b/test/bug/tint/993.wgsl.expected.wgsl
index 12eb2ae..5d0863d 100644
--- a/test/bug/tint/993.wgsl.expected.wgsl
+++ b/test/bug/tint/993.wgsl.expected.wgsl
@@ -2,25 +2,25 @@
   zero : u32;
 }
 
-[[group(1), binding(0)]] var<uniform> constants : Constants;
+@group(1) @binding(0) var<uniform> constants : Constants;
 
 struct Result {
   value : u32;
 }
 
-[[group(1), binding(1)]] var<storage, write> result : Result;
+@group(1) @binding(1) var<storage, write> result : Result;
 
 struct TestData {
   data : array<atomic<i32>, 3>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> s : TestData;
+@group(0) @binding(0) var<storage, read_write> s : TestData;
 
 fn runTest() -> i32 {
   return atomicLoad(&(s.data[(0u + u32(constants.zero))]));
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   result.value = u32(runTest());
 }
diff --git a/test/bug/tint/998.wgsl b/test/bug/tint/998.wgsl
index 39357d6..3186b30 100644
--- a/test/bug/tint/998.wgsl
+++ b/test/bug/tint/998.wgsl
@@ -1,19 +1,19 @@
  struct Constants {
   zero: u32;
 };
-[[group(1), binding(0)]] var<uniform> constants: Constants;
+@group(1) @binding(0) var<uniform> constants: Constants;
 
  struct Result {
   value: u32;
 };
-[[group(1), binding(1)]] var<storage, write> result: Result;
+@group(1) @binding(1) var<storage, write> result: Result;
 
 struct S {
   data: array<u32, 3>;
 };
 var<private> s: S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   s.data[constants.zero] = 0u;
-}
\ No newline at end of file
+}
diff --git a/test/bug/tint/998.wgsl.expected.wgsl b/test/bug/tint/998.wgsl.expected.wgsl
index e7abd6d..35ed13f 100644
--- a/test/bug/tint/998.wgsl.expected.wgsl
+++ b/test/bug/tint/998.wgsl.expected.wgsl
@@ -2,13 +2,13 @@
   zero : u32;
 }
 
-[[group(1), binding(0)]] var<uniform> constants : Constants;
+@group(1) @binding(0) var<uniform> constants : Constants;
 
 struct Result {
   value : u32;
 }
 
-[[group(1), binding(1)]] var<storage, write> result : Result;
+@group(1) @binding(1) var<storage, write> result : Result;
 
 struct S {
   data : array<u32, 3>;
@@ -16,7 +16,7 @@
 
 var<private> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   s.data[constants.zero] = 0u;
 }
diff --git a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl
index 403b87f..eac9ef6 100644
--- a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl
+++ b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = mat3x3<f32>(vec3<f32>( 1.,  2.,  3.), vec3<f32>( 4.,  5.,  6.), vec3<f32>( 7.,  8.,  9.));
     let b = mat3x3<f32>(vec3<f32>(-1., -2., -3.), vec3<f32>(-4., -5., -6.), vec3<f32>(-7., -8., -9.));
diff --git a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.wgsl b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.wgsl
index 9113851..2dfb7c8 100644
--- a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
   let b = mat3x3<f32>(vec3<f32>(-1.0, -2.0, -3.0), vec3<f32>(-4.0, -5.0, -6.0), vec3<f32>(-7.0, -8.0, -9.0));
diff --git a/test/expressions/binary/add/scalar-scalar/f32.wgsl b/test/expressions/binary/add/scalar-scalar/f32.wgsl
index 25bf677..6dcc653 100644
--- a/test/expressions/binary/add/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/add/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 2.;
diff --git a/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.wgsl
index 3db4790..0997a1a 100644
--- a/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 2.0;
diff --git a/test/expressions/binary/add/scalar-scalar/i32.wgsl b/test/expressions/binary/add/scalar-scalar/i32.wgsl
index bb39f2e..93e8a35 100644
--- a/test/expressions/binary/add/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/add/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.wgsl
index 7022af1..46fe066 100644
--- a/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/add/scalar-scalar/u32.wgsl b/test/expressions/binary/add/scalar-scalar/u32.wgsl
index 9f5be35..cf3c56d 100644
--- a/test/expressions/binary/add/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/add/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.wgsl
index fc83a3e..c052925 100644
--- a/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/add/scalar-vec3/f32.wgsl b/test/expressions/binary/add/scalar-vec3/f32.wgsl
index 8adb291..8467ba6 100644
--- a/test/expressions/binary/add/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/add/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4.;
     let b = vec3<f32>(1., 2., 3.);
diff --git a/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.wgsl
index f113f0e..95a584b 100644
--- a/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4.0;
   let b = vec3<f32>(1.0, 2.0, 3.0);
diff --git a/test/expressions/binary/add/scalar-vec3/i32.wgsl b/test/expressions/binary/add/scalar-vec3/i32.wgsl
index 327473e..a61cd74 100644
--- a/test/expressions/binary/add/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/add/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4;
     let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.wgsl
index 6123ca1..c1193c6 100644
--- a/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4;
   let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/add/scalar-vec3/u32.wgsl b/test/expressions/binary/add/scalar-vec3/u32.wgsl
index e36d881..0fb18d4 100644
--- a/test/expressions/binary/add/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/add/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4u;
     let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.wgsl
index 457841e..2ec0595 100644
--- a/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4u;
   let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/add/vec3-scalar/f32.wgsl b/test/expressions/binary/add/vec3-scalar/f32.wgsl
index dd38642..38320af 100644
--- a/test/expressions/binary/add/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/add/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = 4.;
diff --git a/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.wgsl
index 62aa160..86904e5 100644
--- a/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = 4.0;
diff --git a/test/expressions/binary/add/vec3-scalar/i32.wgsl b/test/expressions/binary/add/vec3-scalar/i32.wgsl
index 1e4324a..eacbc3b 100644
--- a/test/expressions/binary/add/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/add/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = 4;
diff --git a/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.wgsl
index 378b1d2..e4775e1 100644
--- a/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = 4;
diff --git a/test/expressions/binary/add/vec3-scalar/u32.wgsl b/test/expressions/binary/add/vec3-scalar/u32.wgsl
index cfff6f1..50ceead 100644
--- a/test/expressions/binary/add/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/add/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = 4u;
diff --git a/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.wgsl
index df0f990..8f0116a 100644
--- a/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = 4u;
diff --git a/test/expressions/binary/add/vec3-vec3/f32.wgsl b/test/expressions/binary/add/vec3-vec3/f32.wgsl
index 4f71797..5658e4e 100644
--- a/test/expressions/binary/add/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/add/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(4., 5., 6.);
diff --git a/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.wgsl
index 54d52b1..b18ded4 100644
--- a/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(4.0, 5.0, 6.0);
diff --git a/test/expressions/binary/add/vec3-vec3/i32.wgsl b/test/expressions/binary/add/vec3-vec3/i32.wgsl
index dd170f5..98ca5c2 100644
--- a/test/expressions/binary/add/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/add/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.wgsl
index 5f1226d..58712ea 100644
--- a/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/add/vec3-vec3/u32.wgsl b/test/expressions/binary/add/vec3-vec3/u32.wgsl
index 433e52d..f6d72ce 100644
--- a/test/expressions/binary/add/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/add/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.wgsl
index 85dad76..db61dda 100644
--- a/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl
index 9ad0a83..e4d1a86 100644
--- a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.wgsl
index ce96c2d..24bab02 100644
--- a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl
index ee0fb0a..c297f9d 100644
--- a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.wgsl
index e5c60f1..a158e4c 100644
--- a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl
index 5dc71ef..c2be41d 100644
--- a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.wgsl
index a30b1f5..334474a 100644
--- a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl
index c520bc3..8383a86 100644
--- a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.wgsl
index b9c2d80..7a95503 100644
--- a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl
index 9e2d99c..e0c227d 100644
--- a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.wgsl
index 3a13163..65617cb 100644
--- a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl
index edf8a70..c8d4257 100644
--- a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.wgsl
index 231ecb5..3c9bed3 100644
--- a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl
index dc5ed1c..d5f6036 100644
--- a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.wgsl
index 8941e04..ffc87a0 100644
--- a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl
index e1adda8..cac160f 100644
--- a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.wgsl
index 800d5d0..580a328 100644
--- a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl
index c0112a3..9844c80 100644
--- a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.wgsl
index 860a11d..dc73ec6 100644
--- a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl
index 32d3b95..f0f7a54 100644
--- a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.wgsl
index 26dda45..930b21f 100644
--- a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl
index c4972f7..0a5f1c2 100644
--- a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.wgsl
index 2811f15..de62f80 100644
--- a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl
index 2e62570..ce705f6 100644
--- a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.wgsl
index 4ba52c5..044e138 100644
--- a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/div/scalar-scalar/f32.wgsl b/test/expressions/binary/div/scalar-scalar/f32.wgsl
index 50cabd0..025664d 100644
--- a/test/expressions/binary/div/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/div/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 2.;
diff --git a/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.wgsl
index 5bc760d..4f2fc18 100644
--- a/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 2.0;
diff --git a/test/expressions/binary/div/scalar-scalar/i32.wgsl b/test/expressions/binary/div/scalar-scalar/i32.wgsl
index 1192d80..cba5901 100644
--- a/test/expressions/binary/div/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/div/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.wgsl
index 6ecb865..8f7e574 100644
--- a/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/div/scalar-scalar/u32.wgsl b/test/expressions/binary/div/scalar-scalar/u32.wgsl
index 6e18ad7..441f376 100644
--- a/test/expressions/binary/div/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/div/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.wgsl
index b5d2f7e..cff0385 100644
--- a/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/div/scalar-vec3/f32.wgsl b/test/expressions/binary/div/scalar-vec3/f32.wgsl
index a9cab92..f43e97c 100644
--- a/test/expressions/binary/div/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/div/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4.;
     let b = vec3<f32>(1., 2., 3.);
diff --git a/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.wgsl
index bd9de59..b8f74f4 100644
--- a/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4.0;
   let b = vec3<f32>(1.0, 2.0, 3.0);
diff --git a/test/expressions/binary/div/scalar-vec3/i32.wgsl b/test/expressions/binary/div/scalar-vec3/i32.wgsl
index ae9daea..071efcf 100644
--- a/test/expressions/binary/div/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/div/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4;
     let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.wgsl
index 6d7e7a4..1a8cb05 100644
--- a/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4;
   let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/div/scalar-vec3/u32.wgsl b/test/expressions/binary/div/scalar-vec3/u32.wgsl
index 0923fb2..5ad53ee 100644
--- a/test/expressions/binary/div/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/div/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4u;
     let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.wgsl
index 5c678e8..ffe6412 100644
--- a/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4u;
   let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/div/vec3-scalar/f32.wgsl b/test/expressions/binary/div/vec3-scalar/f32.wgsl
index 247abdf..087c0d3 100644
--- a/test/expressions/binary/div/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/div/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = 4.;
diff --git a/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.wgsl
index df8a3df..70432db 100644
--- a/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = 4.0;
diff --git a/test/expressions/binary/div/vec3-scalar/i32.wgsl b/test/expressions/binary/div/vec3-scalar/i32.wgsl
index 7e730df..890b125 100644
--- a/test/expressions/binary/div/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/div/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = 4;
diff --git a/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.wgsl
index fa76ca6..f3a1164 100644
--- a/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = 4;
diff --git a/test/expressions/binary/div/vec3-scalar/u32.wgsl b/test/expressions/binary/div/vec3-scalar/u32.wgsl
index 5eadf33..7ab6dd5 100644
--- a/test/expressions/binary/div/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/div/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = 4u;
diff --git a/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.wgsl
index 8e60c28..2f64dd9 100644
--- a/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = 4u;
diff --git a/test/expressions/binary/div/vec3-vec3/f32.wgsl b/test/expressions/binary/div/vec3-vec3/f32.wgsl
index f779554..1f253ea 100644
--- a/test/expressions/binary/div/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/div/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(4., 5., 6.);
diff --git a/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.wgsl
index e824aa5..c3129a9 100644
--- a/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(4.0, 5.0, 6.0);
diff --git a/test/expressions/binary/div/vec3-vec3/i32.wgsl b/test/expressions/binary/div/vec3-vec3/i32.wgsl
index 40e6d7a..68d844f 100644
--- a/test/expressions/binary/div/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/div/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.wgsl
index 940e6d9..a601fa0 100644
--- a/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/div/vec3-vec3/u32.wgsl b/test/expressions/binary/div/vec3-vec3/u32.wgsl
index 39fdc1d..9215590 100644
--- a/test/expressions/binary/div/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/div/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.wgsl
index cbf76b7..66261d5 100644
--- a/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl
index 7ce4276..9503e44 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 0.;
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl
index da2c352..8036fce 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 0.0;
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl
index 7c980aa..73f03b7 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl
index 63bdb5a..5284d7d 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl
index e31e484..38b3d24 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl
index 3b06f40..8c8f7ae 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl
index 83e438c..0db5465 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4.;
     let b = vec3<f32>(0., 2., 0.);
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.wgsl
index 040875e..24d6132 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4.0;
   let b = vec3<f32>(0.0, 2.0, 0.0);
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl
index b981e35..2b6ef48 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4;
     let b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl
index 34804c3..58c1887 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4;
   let b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl
index ae85d37..a0a8fe6 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4u;
     let b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl
index a20cb6a..bb436e1 100644
--- a/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4u;
   let b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl
index 0a15e5b..b83333f 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = 0.;
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.wgsl
index 7396529..f48af63 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = 0.0;
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl
index 93243bc..f9291d5 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl
index c15fc0d..c7f11a1 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl
index e4cc9f0..5446b2a 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl
index a7aaf27..5ead983 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl
index 3800a7b..6db41a4 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(0., 5., 0.);
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl
index b7be414..6f4aa8c 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(0.0, 5.0, 0.0);
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl
index 6f5bac7..5d583e6 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl
index 72c4004..76bf812 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl
index 4d73587..16a0dd0 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl
index 03c8910..eb849bd 100644
--- a/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl
index 12f1a15..55c73c5 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1.;
     var b = 0.;
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl
index 6c35a6e..8b3d931 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1.0;
   var b = 0.0;
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl
index 35b4427..016e7a8 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1;
     var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl
index 6680c0b..c762d02 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1;
   var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl
index 1add65a..a265dd0 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1u;
     var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl
index ef947c3..ad82462 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1u;
   var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl
index bc06d3b..ba92b62 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4.;
     var b = vec3<f32>(0., 2., 0.);
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.wgsl
index 6c0a259..c7a6ac1d 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4.0;
   var b = vec3<f32>(0.0, 2.0, 0.0);
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl
index 7625e4c..9dc07d5 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4;
     var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl
index 58c7456..e4dd4b4 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4;
   var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl
index 86989de..0547691 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4u;
     var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl
index 563beef..9f103fb 100644
--- a/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4u;
   var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl
index 6e95ded..98ff5f0 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<f32>(1., 2., 3.);
     var b = 0.;
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.wgsl
index 27f709e..f0df1be 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<f32>(1.0, 2.0, 3.0);
   var b = 0.0;
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl
index c04ada0..b792c3a 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl
index 6bd3b6d..6bbc51b 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl
index eef2625..4e4eacb 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl
index 31867ef..2387364 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl
index 351527d..69761db 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<f32>(1., 2., 3.);
     var b = vec3<f32>(0., 5., 0.);
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl
index f3eb992..2e518af 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<f32>(1.0, 2.0, 3.0);
   var b = vec3<f32>(0.0, 5.0, 0.0);
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl
index ab6ecd4..65e13dc 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl
index 0e81db7..3700b57 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl
index f55edd5..d2e0417 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl
index 1d60a13..ab03350 100644
--- a/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl
index 2dff3b7..2084ec5 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1.;
     var b = 0.;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl
index 332c2b7..d616f9b 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1.0;
   var b = 0.0;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl
index 375c773..b693c7c 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1;
     var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl
index 90d99f4..da1a3c4 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1;
   var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl
index b555e24..7cab8cf 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1u;
     var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl
index 478767e..7ac2a45 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1u;
   var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl
index 16588a9..62267d4 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4.;
     var b = vec3<f32>(0., 2., 0.);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.wgsl
index 0d44b76..538b208 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4.0;
   var b = vec3<f32>(0.0, 2.0, 0.0);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl
index 8d25a71..c2e1627 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4;
     var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl
index 2bc4678..c29283e 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4;
   var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl
index f417803..6810e9a 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4u;
     var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl
index 147f4d2..286538a 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4u;
   var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl
index 2f23ba4..71b7474 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<f32>(1., 2., 3.);
     var b = 0.;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.wgsl
index fed430a..8caf79e 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<f32>(1.0, 2.0, 3.0);
   var b = 0.0;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl
index 55aa4bc..27fea32 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl
index 56d8e9d..f11c30e 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = 0;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl
index 4076d88..ea02f5c 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl
index e55b987..0154b03 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = 0u;
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl
index f5092ad..fdcbb74 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<f32>(1., 2., 3.);
     var b = vec3<f32>(0., 5., 0.);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl
index 534f264..d37119a 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<f32>(1.0, 2.0, 3.0);
   var b = vec3<f32>(0.0, 5.0, 0.0);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl
index 07d8e62..bb4bda3 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl
index 5ce7a80..17e72b3 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl
index 218e516..26097c9 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl
index 35b85a1..f2206ee 100644
--- a/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/div_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl
index 641f5bf..1779cb0 100644
--- a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2u;
diff --git a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.wgsl
index df07fda..69143dd 100644
--- a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2u;
diff --git a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl
index a1a39b6..9638b83 100644
--- a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.wgsl
index 1aee254..39595c9 100644
--- a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/left-shift/vector-vector/i32.wgsl b/test/expressions/binary/left-shift/vector-vector/i32.wgsl
index 78156b2..fd21fb4 100644
--- a/test/expressions/binary/left-shift/vector-vector/i32.wgsl
+++ b/test/expressions/binary/left-shift/vector-vector/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.wgsl b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.wgsl
index 3a752fa..43d4d00 100644
--- a/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/left-shift/vector-vector/u32.wgsl b/test/expressions/binary/left-shift/vector-vector/u32.wgsl
index c85d91e..7e0db01 100644
--- a/test/expressions/binary/left-shift/vector-vector/u32.wgsl
+++ b/test/expressions/binary/left-shift/vector-vector/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.wgsl b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.wgsl
index 987e680..12a5cde 100644
--- a/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/mod/scalar-scalar/f32.wgsl b/test/expressions/binary/mod/scalar-scalar/f32.wgsl
index 4ab4923..20513e7 100644
--- a/test/expressions/binary/mod/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/mod/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 2.;
diff --git a/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.wgsl
index 66c2041..eebb252 100644
--- a/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 2.0;
diff --git a/test/expressions/binary/mod/scalar-scalar/i32.wgsl b/test/expressions/binary/mod/scalar-scalar/i32.wgsl
index f186706..12a7c72 100644
--- a/test/expressions/binary/mod/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/mod/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.wgsl
index f692f9e..549140e 100644
--- a/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/mod/scalar-scalar/u32.wgsl b/test/expressions/binary/mod/scalar-scalar/u32.wgsl
index d1b56f7..96042bd 100644
--- a/test/expressions/binary/mod/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/mod/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.wgsl
index e3da2c7..d3835ed 100644
--- a/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/mod/vec3-vec3/f32.wgsl b/test/expressions/binary/mod/vec3-vec3/f32.wgsl
index d7cebb2..815fb66 100644
--- a/test/expressions/binary/mod/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/mod/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(4., 5., 6.);
diff --git a/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.wgsl
index d0ef8c9..d37c9d9 100644
--- a/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(4.0, 5.0, 6.0);
diff --git a/test/expressions/binary/mod/vec3-vec3/i32.wgsl b/test/expressions/binary/mod/vec3-vec3/i32.wgsl
index b26013f..55bfa49 100644
--- a/test/expressions/binary/mod/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/mod/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.wgsl
index 553af2b..1769386 100644
--- a/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/mod/vec3-vec3/u32.wgsl b/test/expressions/binary/mod/vec3-vec3/u32.wgsl
index 2ad96bc..02f1eea 100644
--- a/test/expressions/binary/mod/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/mod/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.wgsl
index ca63195..36fa71e 100644
--- a/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl
index b34099c..6d014b8 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 0.;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl
index 235be93..542a2e7 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 0.0;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl
index 9900e05..4c05b0e 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl
index 4c6fdf9..e63b37d 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl
index 4fb0f9f..a63ca8fb 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl
index 62a525b..02a078b 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl
index 9b27df2..b319205 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4;
     let b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl
index dca7442..5b99aea 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4;
   let b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl
index 494a712..94494c3 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4u;
     let b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl
index c061d41..0aca8c0 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4u;
   let b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl
index 2fe5f2d..0a0f4d4 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl
index 0aac1fa..8cc8abe9 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl
index 25b884f..796e15f 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl
index 7665b70..98c4523 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl
index 61df86d..64fc4d5 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(0., 5., 0.);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl
index 180e7d9..227a070 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(0.0, 5.0, 0.0);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl
index 23aa96c..9e64d49 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl
index 259840d..b6fc8c0 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl
index ee9eecc..6724d92 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl
index 08943bb..24d48be 100644
--- a/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_constant/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl
index a4e2202..820231b 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1.;
     var b = 0.;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl
index b6c7b67..019d543 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1.0;
   var b = 0.0;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl
index 7f8d8d0..949d0fe 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1;
     var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl
index 581f6df..74888f2 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1;
   var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl
index edd134b..caf8b51 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1u;
     var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl
index f894e6d..a75275dc 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1u;
   var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl
index b90a404..d341588 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4;
     var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl
index 724d89b..1cff64c 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4;
   var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl
index e6626f1..bbe0ada 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4u;
     var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl
index d820f98..c292b7b 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4u;
   var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl
index e5dd983..732dff4 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl
index c924762..0aaa1a2 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl
index b775a66..87c0466 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl
index d73c1a9..9433a5a 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl
index 92e19cf..6a67f54 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<f32>(1., 2., 3.);
     var b = vec3<f32>(0., 5., 0.);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl
index 06e70ae..965767f 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<f32>(1.0, 2.0, 3.0);
   var b = vec3<f32>(0.0, 5.0, 0.0);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl
index e843464..6996804 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl
index 78f7040..b327a60 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl
index ad50323..769ce16 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl
index e7f2ce8..cdc7848 100644
--- a/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_expression/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl
index b80c201..ec5cc7d 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1.;
     var b = 0.;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl
index 1b3af01..37faeaa3 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1.0;
   var b = 0.0;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl
index 38874c4..3f673f9 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1;
     var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl
index 1b19397..241e4c3 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1;
   var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl
index a8b6555..19f6c04 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 1u;
     var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl
index 1a5f726..8d6291b4 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 1u;
   var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl
index 0f9c970..ac029c5 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4;
     var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl
index 30f19f4..30bdb80 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4;
   var b = vec3<i32>(0, 2, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl
index 9afcb3c..74885a7 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = 4u;
     var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl
index 0e406f7..0abb9dc 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = 4u;
   var b = vec3<u32>(0u, 2u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl
index 41f8c7c..8ceeb13 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl
index dcb6939..b9f853c 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = 0;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl
index 5ddae5b..aa6b581 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl
index eabfbcd..d79da42 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = 0u;
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl
index 7a91bd0..f5d27d5 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<f32>(1., 2., 3.);
     var b = vec3<f32>(0., 5., 0.);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl
index 6d96f89..c178fab 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<f32>(1.0, 2.0, 3.0);
   var b = vec3<f32>(0.0, 5.0, 0.0);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl
index e9364db..129d4b0 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<i32>(1, 2, 3);
     var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl
index ebd6b91..96c95e9 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<i32>(1, 2, 3);
   var b = vec3<i32>(0, 5, 0);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl
index cf77b25..b6be872 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var a = vec3<u32>(1u, 2u, 3u);
     var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl
index 615b56c..de150e4 100644
--- a/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var a = vec3<u32>(1u, 2u, 3u);
   var b = vec3<u32>(0u, 5u, 0u);
diff --git a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl
index ade50cb..d9e4331 100644
--- a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl
+++ b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = mat2x4<f32>(vec4<f32>(1., 2., 3., 4.), vec4<f32>(5., 6., 7., 8.));
     let b = mat4x2<f32>(vec2<f32>(-1., -2.), vec2<f32>(-3., -4.), vec2<f32>(-5., -6.), vec2<f32>(-7., -8.));
diff --git a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.wgsl
index 794ec9b..2bdcf99 100644
--- a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = mat2x4<f32>(vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>(5.0, 6.0, 7.0, 8.0));
   let b = mat4x2<f32>(vec2<f32>(-1.0, -2.0), vec2<f32>(-3.0, -4.0), vec2<f32>(-5.0, -6.0), vec2<f32>(-7.0, -8.0));
diff --git a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl
index 711e0c8..4a407bd 100644
--- a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl
+++ b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl
@@ -2,9 +2,9 @@
     matrix : mat3x2<f32>;
     vector : vec3<f32>;
 };
-[[group(0), binding(0)]] var<uniform> data: S;
+@group(0) @binding(0) var<uniform> data: S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = data.matrix * data.vector;
 }
diff --git a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl
index adb8e74..4f6b25c 100644
--- a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   vector : vec3<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> data : S;
+@group(0) @binding(0) var<uniform> data : S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = (data.matrix * data.vector);
 }
diff --git a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl
index 06744d7..693b097 100644
--- a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl
+++ b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = mat3x3<f32>(vec3<f32>( 1.,  2.,  3.), vec3<f32>( 4.,  5.,  6.), vec3<f32>( 7.,  8.,  9.));
     let b = mat3x3<f32>(vec3<f32>(-1., -2., -3.), vec3<f32>(-4., -5., -6.), vec3<f32>(-7., -8., -9.));
diff --git a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.wgsl
index 2dd4a96..872ec3d 100644
--- a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
   let b = mat3x3<f32>(vec3<f32>(-1.0, -2.0, -3.0), vec3<f32>(-4.0, -5.0, -6.0), vec3<f32>(-7.0, -8.0, -9.0));
diff --git a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl
index 1101f92..f915862 100644
--- a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl
+++ b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl
@@ -2,9 +2,9 @@
     matrix : mat3x3<f32>;
     vector : vec3<f32>;
 };
-[[group(0), binding(0)]] var<uniform> data: S;
+@group(0) @binding(0) var<uniform> data: S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = data.matrix * data.vector;
 }
diff --git a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl
index 461d0c7..2c12345 100644
--- a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   vector : vec3<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> data : S;
+@group(0) @binding(0) var<uniform> data : S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = (data.matrix * data.vector);
 }
diff --git a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl
index 236146e..76e4db2 100644
--- a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl
+++ b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = mat4x2<f32>(vec2<f32>(-1., -2.), vec2<f32>(-3., -4.), vec2<f32>(-5., -6.), vec2<f32>(-7., -8.));
     let b = mat2x4<f32>(vec4<f32>(1., 2., 3., 4.), vec4<f32>(5., 6., 7., 8.));
diff --git a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.wgsl
index b4803d4..cc6bf09 100644
--- a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = mat4x2<f32>(vec2<f32>(-1.0, -2.0), vec2<f32>(-3.0, -4.0), vec2<f32>(-5.0, -6.0), vec2<f32>(-7.0, -8.0));
   let b = mat2x4<f32>(vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>(5.0, 6.0, 7.0, 8.0));
diff --git a/test/expressions/binary/mul/scalar-scalar/f32.wgsl b/test/expressions/binary/mul/scalar-scalar/f32.wgsl
index 23d7371..7c3a494 100644
--- a/test/expressions/binary/mul/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/mul/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 2.;
diff --git a/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.wgsl
index 6f874935..1308e5a 100644
--- a/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 2.0;
diff --git a/test/expressions/binary/mul/scalar-scalar/i32.wgsl b/test/expressions/binary/mul/scalar-scalar/i32.wgsl
index ea58328..841429e 100644
--- a/test/expressions/binary/mul/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/mul/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.wgsl
index 5f53be8..e0189a5 100644
--- a/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/mul/scalar-scalar/u32.wgsl b/test/expressions/binary/mul/scalar-scalar/u32.wgsl
index ec6a61d..4998346 100644
--- a/test/expressions/binary/mul/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/mul/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.wgsl
index 92cffef..3dda0e0 100644
--- a/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/mul/scalar-vec3/f32.wgsl b/test/expressions/binary/mul/scalar-vec3/f32.wgsl
index cd19d3b..62560cb 100644
--- a/test/expressions/binary/mul/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/mul/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4.;
     let b = vec3<f32>(1., 2., 3.);
diff --git a/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.wgsl
index 65ac8cc..f2cf6c4 100644
--- a/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4.0;
   let b = vec3<f32>(1.0, 2.0, 3.0);
diff --git a/test/expressions/binary/mul/scalar-vec3/i32.wgsl b/test/expressions/binary/mul/scalar-vec3/i32.wgsl
index 8d1bf3f..8f8d3e4 100644
--- a/test/expressions/binary/mul/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/mul/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4;
     let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.wgsl
index c5744b7..85f39b5 100644
--- a/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4;
   let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/mul/scalar-vec3/u32.wgsl b/test/expressions/binary/mul/scalar-vec3/u32.wgsl
index d5f432e6..5c9260f 100644
--- a/test/expressions/binary/mul/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/mul/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4u;
     let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.wgsl
index 60505a4..9fc3bff 100644
--- a/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4u;
   let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl
index 8cfd8e1..5606f65 100644
--- a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl
+++ b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl
@@ -2,9 +2,9 @@
     matrix : mat3x3<f32>;
     vector : vec3<f32>;
 };
-[[group(0), binding(0)]] var<uniform> data: S;
+@group(0) @binding(0) var<uniform> data: S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = data.vector * data.matrix;
 }
diff --git a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl
index 10e087f..aca7bee4 100644
--- a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   vector : vec3<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> data : S;
+@group(0) @binding(0) var<uniform> data : S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = (data.vector * data.matrix);
 }
diff --git a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl
index 48b2709..5cceccb 100644
--- a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl
+++ b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl
@@ -2,9 +2,9 @@
     matrix : mat4x3<f32>;
     vector : vec3<f32>;
 };
-[[group(0), binding(0)]] var<uniform> data: S;
+@group(0) @binding(0) var<uniform> data: S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = data.vector * data.matrix;
 }
diff --git a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl
index 223240f..a3bfccc 100644
--- a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl
@@ -3,9 +3,9 @@
   vector : vec3<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> data : S;
+@group(0) @binding(0) var<uniform> data : S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   let x = (data.vector * data.matrix);
 }
diff --git a/test/expressions/binary/mul/vec3-scalar/f32.wgsl b/test/expressions/binary/mul/vec3-scalar/f32.wgsl
index 34a7b70..10f72ae 100644
--- a/test/expressions/binary/mul/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/mul/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = 4.;
diff --git a/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.wgsl
index 712df51..b3acece 100644
--- a/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = 4.0;
diff --git a/test/expressions/binary/mul/vec3-scalar/i32.wgsl b/test/expressions/binary/mul/vec3-scalar/i32.wgsl
index a8f8d1e..d4d0678 100644
--- a/test/expressions/binary/mul/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/mul/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = 4;
diff --git a/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.wgsl
index d8f7e63..a727294 100644
--- a/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = 4;
diff --git a/test/expressions/binary/mul/vec3-scalar/u32.wgsl b/test/expressions/binary/mul/vec3-scalar/u32.wgsl
index a63cb22..03a79ac 100644
--- a/test/expressions/binary/mul/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/mul/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = 4u;
diff --git a/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.wgsl
index 995a6a3..fc7e60d 100644
--- a/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = 4u;
diff --git a/test/expressions/binary/mul/vec3-vec3/f32.wgsl b/test/expressions/binary/mul/vec3-vec3/f32.wgsl
index 184a9fb..6d0e211 100644
--- a/test/expressions/binary/mul/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/mul/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(4., 5., 6.);
diff --git a/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.wgsl
index fff2a26..a0dd1f7 100644
--- a/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(4.0, 5.0, 6.0);
diff --git a/test/expressions/binary/mul/vec3-vec3/i32.wgsl b/test/expressions/binary/mul/vec3-vec3/i32.wgsl
index dc812d8..32ae83f 100644
--- a/test/expressions/binary/mul/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/mul/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.wgsl
index 3ca04ae..20121b5 100644
--- a/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/mul/vec3-vec3/u32.wgsl b/test/expressions/binary/mul/vec3-vec3/u32.wgsl
index d1e2219..39e1db4 100644
--- a/test/expressions/binary/mul/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/mul/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.wgsl
index 4392855..a910c86 100644
--- a/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl
index ef2e9f9..54eda6d5 100644
--- a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2u;
diff --git a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.wgsl
index 9953bcc..57f33c8 100644
--- a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2u;
diff --git a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl
index ecfbc1b..4cf2a84 100644
--- a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.wgsl
index 3757438..827e23f 100644
--- a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/right-shift/vector-vector/i32.wgsl b/test/expressions/binary/right-shift/vector-vector/i32.wgsl
index ffae0c1..366c8c4 100644
--- a/test/expressions/binary/right-shift/vector-vector/i32.wgsl
+++ b/test/expressions/binary/right-shift/vector-vector/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.wgsl b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.wgsl
index 765b4b1..96e088f 100644
--- a/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/right-shift/vector-vector/u32.wgsl b/test/expressions/binary/right-shift/vector-vector/u32.wgsl
index 35da873..a70095de 100644
--- a/test/expressions/binary/right-shift/vector-vector/u32.wgsl
+++ b/test/expressions/binary/right-shift/vector-vector/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.wgsl b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.wgsl
index 7368058..4b44e73 100644
--- a/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl
index 4dec34d..1d90779 100644
--- a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl
+++ b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = mat3x3<f32>(vec3<f32>( 1.,  2.,  3.), vec3<f32>( 4.,  5.,  6.), vec3<f32>( 7.,  8.,  9.));
     let b = mat3x3<f32>(vec3<f32>(-1., -2., -3.), vec3<f32>(-4., -5., -6.), vec3<f32>(-7., -8., -9.));
diff --git a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.wgsl b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.wgsl
index 5003fea..d54c2dcc 100644
--- a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
   let b = mat3x3<f32>(vec3<f32>(-1.0, -2.0, -3.0), vec3<f32>(-4.0, -5.0, -6.0), vec3<f32>(-7.0, -8.0, -9.0));
diff --git a/test/expressions/binary/sub/scalar-scalar/f32.wgsl b/test/expressions/binary/sub/scalar-scalar/f32.wgsl
index b0e6359..7aec1fe 100644
--- a/test/expressions/binary/sub/scalar-scalar/f32.wgsl
+++ b/test/expressions/binary/sub/scalar-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1.;
     let b = 2.;
diff --git a/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.wgsl
index ffc19e2..7639858 100644
--- a/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1.0;
   let b = 2.0;
diff --git a/test/expressions/binary/sub/scalar-scalar/i32.wgsl b/test/expressions/binary/sub/scalar-scalar/i32.wgsl
index 7d396dc..93fb7e0 100644
--- a/test/expressions/binary/sub/scalar-scalar/i32.wgsl
+++ b/test/expressions/binary/sub/scalar-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1;
     let b = 2;
diff --git a/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.wgsl
index d881d44..9aa9bf3 100644
--- a/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1;
   let b = 2;
diff --git a/test/expressions/binary/sub/scalar-scalar/u32.wgsl b/test/expressions/binary/sub/scalar-scalar/u32.wgsl
index 5f210c2..fa75c67 100644
--- a/test/expressions/binary/sub/scalar-scalar/u32.wgsl
+++ b/test/expressions/binary/sub/scalar-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 1u;
     let b = 2u;
diff --git a/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.wgsl
index 932d0b7..81cbedd 100644
--- a/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 1u;
   let b = 2u;
diff --git a/test/expressions/binary/sub/scalar-vec3/f32.wgsl b/test/expressions/binary/sub/scalar-vec3/f32.wgsl
index 1b23e49..8a4a112 100644
--- a/test/expressions/binary/sub/scalar-vec3/f32.wgsl
+++ b/test/expressions/binary/sub/scalar-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4.;
     let b = vec3<f32>(1., 2., 3.);
diff --git a/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.wgsl
index 69ff882..1404695 100644
--- a/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4.0;
   let b = vec3<f32>(1.0, 2.0, 3.0);
diff --git a/test/expressions/binary/sub/scalar-vec3/i32.wgsl b/test/expressions/binary/sub/scalar-vec3/i32.wgsl
index 1e024c5..8b31299 100644
--- a/test/expressions/binary/sub/scalar-vec3/i32.wgsl
+++ b/test/expressions/binary/sub/scalar-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4;
     let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.wgsl
index 0efb533..bec3a19 100644
--- a/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4;
   let b = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/binary/sub/scalar-vec3/u32.wgsl b/test/expressions/binary/sub/scalar-vec3/u32.wgsl
index 0042cc2..562719f 100644
--- a/test/expressions/binary/sub/scalar-vec3/u32.wgsl
+++ b/test/expressions/binary/sub/scalar-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = 4u;
     let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.wgsl
index b78efa7..4e1bca9 100644
--- a/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = 4u;
   let b = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/binary/sub/vec3-scalar/f32.wgsl b/test/expressions/binary/sub/vec3-scalar/f32.wgsl
index 0bdf89e..4b4aced 100644
--- a/test/expressions/binary/sub/vec3-scalar/f32.wgsl
+++ b/test/expressions/binary/sub/vec3-scalar/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = 4.;
diff --git a/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.wgsl b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.wgsl
index de0d72d..169e9db 100644
--- a/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = 4.0;
diff --git a/test/expressions/binary/sub/vec3-scalar/i32.wgsl b/test/expressions/binary/sub/vec3-scalar/i32.wgsl
index 0fab83f..e12a2ba 100644
--- a/test/expressions/binary/sub/vec3-scalar/i32.wgsl
+++ b/test/expressions/binary/sub/vec3-scalar/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = 4;
diff --git a/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.wgsl b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.wgsl
index ea16bd4..003acfa 100644
--- a/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = 4;
diff --git a/test/expressions/binary/sub/vec3-scalar/u32.wgsl b/test/expressions/binary/sub/vec3-scalar/u32.wgsl
index 0ec4317..f5e4e5a 100644
--- a/test/expressions/binary/sub/vec3-scalar/u32.wgsl
+++ b/test/expressions/binary/sub/vec3-scalar/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = 4u;
diff --git a/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.wgsl b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.wgsl
index 2052d8b..9b9c0de 100644
--- a/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = 4u;
diff --git a/test/expressions/binary/sub/vec3-vec3/f32.wgsl b/test/expressions/binary/sub/vec3-vec3/f32.wgsl
index 3bb31cf..cea0bb7 100644
--- a/test/expressions/binary/sub/vec3-vec3/f32.wgsl
+++ b/test/expressions/binary/sub/vec3-vec3/f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<f32>(1., 2., 3.);
     let b = vec3<f32>(4., 5., 6.);
diff --git a/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.wgsl
index 8beb881..6075405 100644
--- a/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<f32>(1.0, 2.0, 3.0);
   let b = vec3<f32>(4.0, 5.0, 6.0);
diff --git a/test/expressions/binary/sub/vec3-vec3/i32.wgsl b/test/expressions/binary/sub/vec3-vec3/i32.wgsl
index 7ecdc45..2ab7275 100644
--- a/test/expressions/binary/sub/vec3-vec3/i32.wgsl
+++ b/test/expressions/binary/sub/vec3-vec3/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<i32>(1, 2, 3);
     let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.wgsl b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.wgsl
index 00ff109..a5b306b 100644
--- a/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<i32>(1, 2, 3);
   let b = vec3<i32>(4, 5, 6);
diff --git a/test/expressions/binary/sub/vec3-vec3/u32.wgsl b/test/expressions/binary/sub/vec3-vec3/u32.wgsl
index 547383e..cb59c1f 100644
--- a/test/expressions/binary/sub/vec3-vec3/u32.wgsl
+++ b/test/expressions/binary/sub/vec3-vec3/u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a = vec3<u32>(1u, 2u, 3u);
     let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.wgsl b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.wgsl
index 7559a1b..dea4cfe 100644
--- a/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a = vec3<u32>(1u, 2u, 3u);
   let b = vec3<u32>(4u, 5u, 6u);
diff --git a/test/expressions/bitcast/scalar/f32-f32.wgsl b/test/expressions/bitcast/scalar/f32-f32.wgsl
index a91bec0..0e7b8ba 100644
--- a/test/expressions/bitcast/scalar/f32-f32.wgsl
+++ b/test/expressions/bitcast/scalar/f32-f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : f32 = 1.;
     let b : f32 = bitcast<f32>(a);
diff --git a/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.wgsl
index 1d57da4..ac6a874 100644
--- a/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : f32 = 1.0;
   let b : f32 = bitcast<f32>(a);
diff --git a/test/expressions/bitcast/scalar/f32-i32.wgsl b/test/expressions/bitcast/scalar/f32-i32.wgsl
index c54ab72..91c3d8f 100644
--- a/test/expressions/bitcast/scalar/f32-i32.wgsl
+++ b/test/expressions/bitcast/scalar/f32-i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : f32 = 1.;
     let b : i32 = bitcast<i32>(a);
diff --git a/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.wgsl
index 331cca2..81e6fa6 100644
--- a/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : f32 = 1.0;
   let b : i32 = bitcast<i32>(a);
diff --git a/test/expressions/bitcast/scalar/f32-u32.wgsl b/test/expressions/bitcast/scalar/f32-u32.wgsl
index 0d79999..6f33d5a 100644
--- a/test/expressions/bitcast/scalar/f32-u32.wgsl
+++ b/test/expressions/bitcast/scalar/f32-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : f32 = 1.;
     let b : u32 = bitcast<u32>(a);
diff --git a/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.wgsl
index e52e25e..c230fb8 100644
--- a/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : f32 = 1.0;
   let b : u32 = bitcast<u32>(a);
diff --git a/test/expressions/bitcast/scalar/i32-f32.wgsl b/test/expressions/bitcast/scalar/i32-f32.wgsl
index f398e96..00a8099 100644
--- a/test/expressions/bitcast/scalar/i32-f32.wgsl
+++ b/test/expressions/bitcast/scalar/i32-f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : i32 = 1;
     let b : f32 = bitcast<f32>(a);
diff --git a/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.wgsl
index 9471a56..1aae69a 100644
--- a/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : i32 = 1;
   let b : f32 = bitcast<f32>(a);
diff --git a/test/expressions/bitcast/scalar/i32-i32.wgsl b/test/expressions/bitcast/scalar/i32-i32.wgsl
index eaacdd1..282e218 100644
--- a/test/expressions/bitcast/scalar/i32-i32.wgsl
+++ b/test/expressions/bitcast/scalar/i32-i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : i32 = 1;
     let b : i32 = bitcast<i32>(a);
diff --git a/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.wgsl
index ed26420..9ecbee5 100644
--- a/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : i32 = 1;
   let b : i32 = bitcast<i32>(a);
diff --git a/test/expressions/bitcast/scalar/i32-u32.wgsl b/test/expressions/bitcast/scalar/i32-u32.wgsl
index f11e65d..ebb81b4 100644
--- a/test/expressions/bitcast/scalar/i32-u32.wgsl
+++ b/test/expressions/bitcast/scalar/i32-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : i32 = 1;
     let b : u32 = bitcast<u32>(a);
diff --git a/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.wgsl
index 6c7b9f9..cb8e316 100644
--- a/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : i32 = 1;
   let b : u32 = bitcast<u32>(a);
diff --git a/test/expressions/bitcast/scalar/i32min-u32.wgsl b/test/expressions/bitcast/scalar/i32min-u32.wgsl
index 9812c83..de57788 100644
--- a/test/expressions/bitcast/scalar/i32min-u32.wgsl
+++ b/test/expressions/bitcast/scalar/i32min-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let b : u32 = bitcast<u32>(-2147483648);
 }
diff --git a/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.wgsl
index 9812c83..de57788 100644
--- a/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let b : u32 = bitcast<u32>(-2147483648);
 }
diff --git a/test/expressions/bitcast/scalar/u32-f32.wgsl b/test/expressions/bitcast/scalar/u32-f32.wgsl
index 82c62b7..c196d83 100644
--- a/test/expressions/bitcast/scalar/u32-f32.wgsl
+++ b/test/expressions/bitcast/scalar/u32-f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : u32 = 1u;
     let b : f32 = bitcast<f32>(a);
diff --git a/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.wgsl
index 9efbcfd..7c0cb22 100644
--- a/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : u32 = 1u;
   let b : f32 = bitcast<f32>(a);
diff --git a/test/expressions/bitcast/scalar/u32-i32.wgsl b/test/expressions/bitcast/scalar/u32-i32.wgsl
index 91b4230..9d6785a 100644
--- a/test/expressions/bitcast/scalar/u32-i32.wgsl
+++ b/test/expressions/bitcast/scalar/u32-i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : u32 = 1u;
     let b : i32 = bitcast<i32>(a);
diff --git a/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.wgsl
index 9ac119d..4d8f585 100644
--- a/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : u32 = 1u;
   let b : i32 = bitcast<i32>(a);
diff --git a/test/expressions/bitcast/scalar/u32-u32.wgsl b/test/expressions/bitcast/scalar/u32-u32.wgsl
index ceddfa2..35f0a23 100644
--- a/test/expressions/bitcast/scalar/u32-u32.wgsl
+++ b/test/expressions/bitcast/scalar/u32-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : u32 = 1u;
     let b : u32 = bitcast<u32>(a);
diff --git a/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.wgsl b/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.wgsl
index 4fde963..45c6de7 100644
--- a/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : u32 = 1u;
   let b : u32 = bitcast<u32>(a);
diff --git a/test/expressions/bitcast/vector/f32-f32.wgsl b/test/expressions/bitcast/vector/f32-f32.wgsl
index 2e863d3..8842275 100644
--- a/test/expressions/bitcast/vector/f32-f32.wgsl
+++ b/test/expressions/bitcast/vector/f32-f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<f32> = vec3<f32>(1., 2., 3.);
     let b : vec3<f32> = bitcast<vec3<f32>>(a);
diff --git a/test/expressions/bitcast/vector/f32-f32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/f32-f32.wgsl.expected.wgsl
index 5ed2541..1af19c7 100644
--- a/test/expressions/bitcast/vector/f32-f32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/f32-f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
   let b : vec3<f32> = bitcast<vec3<f32>>(a);
diff --git a/test/expressions/bitcast/vector/f32-i32.wgsl b/test/expressions/bitcast/vector/f32-i32.wgsl
index 493dddd..69a8ee6 100644
--- a/test/expressions/bitcast/vector/f32-i32.wgsl
+++ b/test/expressions/bitcast/vector/f32-i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<f32> = vec3<f32>(1., 2., 3.);
     let b : vec3<i32> = bitcast<vec3<i32>>(a);
diff --git a/test/expressions/bitcast/vector/f32-i32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/f32-i32.wgsl.expected.wgsl
index e4363c8..6f7c20e 100644
--- a/test/expressions/bitcast/vector/f32-i32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/f32-i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
   let b : vec3<i32> = bitcast<vec3<i32>>(a);
diff --git a/test/expressions/bitcast/vector/f32-u32.wgsl b/test/expressions/bitcast/vector/f32-u32.wgsl
index 7daf410..c478dc8 100644
--- a/test/expressions/bitcast/vector/f32-u32.wgsl
+++ b/test/expressions/bitcast/vector/f32-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<f32> = vec3<f32>(1., 2., 3.);
     let b : vec3<u32> = bitcast<vec3<u32>>(a);
diff --git a/test/expressions/bitcast/vector/f32-u32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/f32-u32.wgsl.expected.wgsl
index 6cd21fa..d47bade 100644
--- a/test/expressions/bitcast/vector/f32-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/f32-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
   let b : vec3<u32> = bitcast<vec3<u32>>(a);
diff --git a/test/expressions/bitcast/vector/i32-f32.wgsl b/test/expressions/bitcast/vector/i32-f32.wgsl
index e3bc280..7fa9e52 100644
--- a/test/expressions/bitcast/vector/i32-f32.wgsl
+++ b/test/expressions/bitcast/vector/i32-f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<i32> = vec3<i32>(1, 2, 3);
     let b : vec3<f32> = bitcast<vec3<f32>>(a);
diff --git a/test/expressions/bitcast/vector/i32-f32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/i32-f32.wgsl.expected.wgsl
index a7a19ea..424988d 100644
--- a/test/expressions/bitcast/vector/i32-f32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/i32-f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<i32> = vec3<i32>(1, 2, 3);
   let b : vec3<f32> = bitcast<vec3<f32>>(a);
diff --git a/test/expressions/bitcast/vector/i32-i32.wgsl b/test/expressions/bitcast/vector/i32-i32.wgsl
index 3149395..1b332c6 100644
--- a/test/expressions/bitcast/vector/i32-i32.wgsl
+++ b/test/expressions/bitcast/vector/i32-i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<i32> = vec3<i32>(1, 2, 3);
     let b : vec3<i32> = bitcast<vec3<i32>>(a);
diff --git a/test/expressions/bitcast/vector/i32-i32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/i32-i32.wgsl.expected.wgsl
index 94f3acd..b77a8bf 100644
--- a/test/expressions/bitcast/vector/i32-i32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/i32-i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<i32> = vec3<i32>(1, 2, 3);
   let b : vec3<i32> = bitcast<vec3<i32>>(a);
diff --git a/test/expressions/bitcast/vector/i32-u32.wgsl b/test/expressions/bitcast/vector/i32-u32.wgsl
index e3cf1fa..f60a904 100644
--- a/test/expressions/bitcast/vector/i32-u32.wgsl
+++ b/test/expressions/bitcast/vector/i32-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<i32> = vec3<i32>(1, 2, 3);
     let b : vec3<u32> = bitcast<vec3<u32>>(a);
diff --git a/test/expressions/bitcast/vector/i32-u32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/i32-u32.wgsl.expected.wgsl
index 64dd507..a0d6f73 100644
--- a/test/expressions/bitcast/vector/i32-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/i32-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<i32> = vec3<i32>(1, 2, 3);
   let b : vec3<u32> = bitcast<vec3<u32>>(a);
diff --git a/test/expressions/bitcast/vector/u32-f32.wgsl b/test/expressions/bitcast/vector/u32-f32.wgsl
index 4323361..76adfdd 100644
--- a/test/expressions/bitcast/vector/u32-f32.wgsl
+++ b/test/expressions/bitcast/vector/u32-f32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<u32> = vec3<u32>(1u, 2u, 3u);
     let b : vec3<f32> = bitcast<vec3<f32>>(a);
diff --git a/test/expressions/bitcast/vector/u32-f32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/u32-f32.wgsl.expected.wgsl
index e74cdd3..dd4b3a3 100644
--- a/test/expressions/bitcast/vector/u32-f32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/u32-f32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<u32> = vec3<u32>(1u, 2u, 3u);
   let b : vec3<f32> = bitcast<vec3<f32>>(a);
diff --git a/test/expressions/bitcast/vector/u32-i32.wgsl b/test/expressions/bitcast/vector/u32-i32.wgsl
index 6efefc3..9ae5c29 100644
--- a/test/expressions/bitcast/vector/u32-i32.wgsl
+++ b/test/expressions/bitcast/vector/u32-i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<u32> = vec3<u32>(1u, 2u, 3u);
     let b : vec3<i32> = bitcast<vec3<i32>>(a);
diff --git a/test/expressions/bitcast/vector/u32-i32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/u32-i32.wgsl.expected.wgsl
index db1bd62..7291ade 100644
--- a/test/expressions/bitcast/vector/u32-i32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/u32-i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<u32> = vec3<u32>(1u, 2u, 3u);
   let b : vec3<i32> = bitcast<vec3<i32>>(a);
diff --git a/test/expressions/bitcast/vector/u32-u32.wgsl b/test/expressions/bitcast/vector/u32-u32.wgsl
index 99d2211..277597d 100644
--- a/test/expressions/bitcast/vector/u32-u32.wgsl
+++ b/test/expressions/bitcast/vector/u32-u32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let a : vec3<u32> = vec3<u32>(1u, 2u, 3u);
     let b : vec3<u32> = bitcast<vec3<u32>>(a);
diff --git a/test/expressions/bitcast/vector/u32-u32.wgsl.expected.wgsl b/test/expressions/bitcast/vector/u32-u32.wgsl.expected.wgsl
index 6bad22d..86d9265 100644
--- a/test/expressions/bitcast/vector/u32-u32.wgsl.expected.wgsl
+++ b/test/expressions/bitcast/vector/u32-u32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let a : vec3<u32> = vec3<u32>(1u, 2u, 3u);
   let b : vec3<u32> = bitcast<vec3<u32>>(a);
diff --git a/test/expressions/literals/-inf.spvasm.expected.wgsl b/test/expressions/literals/-inf.spvasm.expected.wgsl
index 60e7281..738effc 100644
--- a/test/expressions/literals/-inf.spvasm.expected.wgsl
+++ b/test/expressions/literals/-inf.spvasm.expected.wgsl
@@ -6,11 +6,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   out_var_SV_TARGET_1 : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(out_var_SV_TARGET);
diff --git a/test/expressions/literals/inf.spvasm.expected.wgsl b/test/expressions/literals/inf.spvasm.expected.wgsl
index 0389b98..9fc866d 100644
--- a/test/expressions/literals/inf.spvasm.expected.wgsl
+++ b/test/expressions/literals/inf.spvasm.expected.wgsl
@@ -6,11 +6,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   out_var_SV_TARGET_1 : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(out_var_SV_TARGET);
diff --git a/test/expressions/literals/nan.spvasm.expected.wgsl b/test/expressions/literals/nan.spvasm.expected.wgsl
index 816c89e..a53b01d 100644
--- a/test/expressions/literals/nan.spvasm.expected.wgsl
+++ b/test/expressions/literals/nan.spvasm.expected.wgsl
@@ -6,11 +6,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   out_var_SV_TARGET_1 : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(out_var_SV_TARGET);
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl
index dd4826a..cb779ee 100644
--- a/test/expressions/swizzle/read/packed_vec3/f32.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl
@@ -2,7 +2,7 @@
     v: vec3<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> U : S;
+@group(0) @binding(0) var<uniform> U : S;
 
 fn f() {
     var    v = U.v;
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
index 727788b..1f87362 100644
--- a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   v : vec3<f32>;
 }
 
-[[group(0), binding(0)]] var<uniform> U : S;
+@group(0) @binding(0) var<uniform> U : S;
 
 fn f() {
   var v = U.v;
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl
index b81d0dd..6780f9f 100644
--- a/test/expressions/swizzle/read/packed_vec3/i32.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl
@@ -2,7 +2,7 @@
     v: vec3<i32>;
 };
 
-[[group(0), binding(0)]] var<uniform> U : S;
+@group(0) @binding(0) var<uniform> U : S;
 
 fn f() {
     var    v = U.v;
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
index dffd20c9..a79daa4 100644
--- a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   v : vec3<i32>;
 }
 
-[[group(0), binding(0)]] var<uniform> U : S;
+@group(0) @binding(0) var<uniform> U : S;
 
 fn f() {
   var v = U.v;
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl
index d0497a6..afd1fa5 100644
--- a/test/expressions/swizzle/read/packed_vec3/u32.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl
@@ -2,7 +2,7 @@
     v: vec3<u32>;
 };
 
-[[group(0), binding(0)]] var<uniform> U : S;
+@group(0) @binding(0) var<uniform> U : S;
 
 fn f() {
     var    v = U.v;
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
index 36bf160..836c617 100644
--- a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   v : vec3<u32>;
 }
 
-[[group(0), binding(0)]] var<uniform> U : S;
+@group(0) @binding(0) var<uniform> U : S;
 
 fn f() {
   var v = U.v;
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl
index 9a194ea..623d785 100644
--- a/test/expressions/swizzle/write/packed_vec3/f32.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl
@@ -2,7 +2,7 @@
     v: vec3<f32>;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> U : S;
+@group(0) @binding(0) var<storage, read_write> U : S;
 
 fn f() {
     U.v = vec3<f32>(1.0, 2.0, 3.0);
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
index 84f2ef9..b5f5abc 100644
--- a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   v : vec3<f32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> U : S;
+@group(0) @binding(0) var<storage, read_write> U : S;
 
 fn f() {
   U.v = vec3<f32>(1.0, 2.0, 3.0);
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl
index 2880622..5441f0a 100644
--- a/test/expressions/swizzle/write/packed_vec3/i32.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl
@@ -2,7 +2,7 @@
     v: vec3<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> U : S;
+@group(0) @binding(0) var<storage, read_write> U : S;
 
 fn f() {
     U.v = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
index a017589..762409a 100644
--- a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   v : vec3<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> U : S;
+@group(0) @binding(0) var<storage, read_write> U : S;
 
 fn f() {
   U.v = vec3<i32>(1, 2, 3);
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl
index 4dd1bfd..0a3ee66 100644
--- a/test/expressions/swizzle/write/packed_vec3/u32.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl
@@ -2,7 +2,7 @@
     v: vec3<u32>;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> U : S;
+@group(0) @binding(0) var<storage, read_write> U : S;
 
 fn f() {
     U.v = vec3<u32>(1u, 2u, 3u);
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
index b9c4866..e87b551 100644
--- a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   v : vec3<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> U : S;
+@group(0) @binding(0) var<storage, read_write> U : S;
 
 fn f() {
   U.v = vec3<u32>(1u, 2u, 3u);
diff --git a/test/intrinsics/arrayLength/complex_via_let.wgsl b/test/intrinsics/arrayLength/complex_via_let.wgsl
index 4b3a76d..76dd5a2 100644
--- a/test/intrinsics/arrayLength/complex_via_let.wgsl
+++ b/test/intrinsics/arrayLength/complex_via_let.wgsl
@@ -2,9 +2,9 @@
     a : array<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let p = &G;
     let p2 = &((*p).a);
diff --git a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl
index 1dcc7b1..3701b01 100644
--- a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &(G);
   let p2 = &((*(p)).a);
diff --git a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl
index 2e2966d..8626deeb 100644
--- a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl
+++ b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let p = &G;
     let p2 = &(*p);
diff --git a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.wgsl b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.wgsl
index 56b0e0a..2d06902 100644
--- a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &(G);
   let p2 = &(*(p));
diff --git a/test/intrinsics/arrayLength/deprecated.wgsl b/test/intrinsics/arrayLength/deprecated.wgsl
index c3381aa..ce9d77c 100644
--- a/test/intrinsics/arrayLength/deprecated.wgsl
+++ b/test/intrinsics/arrayLength/deprecated.wgsl
@@ -2,9 +2,9 @@
     a : array<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let l1 : u32 = arrayLength(&G.a);
 
diff --git a/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl b/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl
index 5489c10..2cc825e 100644
--- a/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let l1 : u32 = arrayLength(&(G.a));
   let p = &(G.a);
diff --git a/test/intrinsics/arrayLength/simple.wgsl b/test/intrinsics/arrayLength/simple.wgsl
index d3cba2a..95037fe 100644
--- a/test/intrinsics/arrayLength/simple.wgsl
+++ b/test/intrinsics/arrayLength/simple.wgsl
@@ -2,9 +2,9 @@
     a : array<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let l1 : u32 = arrayLength(&G.a);
 }
diff --git a/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl b/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl
index 9b7d049..f9fdd91 100644
--- a/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let l1 : u32 = arrayLength(&(G.a));
 }
diff --git a/test/intrinsics/arrayLength/simple_no_struct.wgsl b/test/intrinsics/arrayLength/simple_no_struct.wgsl
index 0fcbfbe..985c87e 100644
--- a/test/intrinsics/arrayLength/simple_no_struct.wgsl
+++ b/test/intrinsics/arrayLength/simple_no_struct.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let l1 : u32 = arrayLength(&G);
 }
diff --git a/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.wgsl b/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.wgsl
index cbe8d72..b45cd36 100644
--- a/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let l1 : u32 = arrayLength(&(G));
 }
diff --git a/test/intrinsics/arrayLength/via_let.wgsl b/test/intrinsics/arrayLength/via_let.wgsl
index d9d71f5..53e45ba 100644
--- a/test/intrinsics/arrayLength/via_let.wgsl
+++ b/test/intrinsics/arrayLength/via_let.wgsl
@@ -2,9 +2,9 @@
     a : array<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let p = &G.a;
     let p2 = p;
diff --git a/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl b/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl
index 13663f0..25ab694 100644
--- a/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &(G.a);
   let p2 = p;
diff --git a/test/intrinsics/arrayLength/via_let_complex.wgsl b/test/intrinsics/arrayLength/via_let_complex.wgsl
index 98cfdd49..bd99c11 100644
--- a/test/intrinsics/arrayLength/via_let_complex.wgsl
+++ b/test/intrinsics/arrayLength/via_let_complex.wgsl
@@ -2,9 +2,9 @@
     a : array<i32>;
 };
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &*&G;
   let p2 = &*p;
diff --git a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl
index 7b07952..30f059a 100644
--- a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read> G : S;
+@group(0) @binding(0) var<storage, read> G : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &(*(&(G)));
   let p2 = &(*(p));
diff --git a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl
index 4e8a6c5..dd8beb6 100644
--- a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl
+++ b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &*&G;
   let p2 = &*p;
diff --git a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.wgsl b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.wgsl
index 97964a4..a92b9be 100644
--- a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &(*(&(G)));
   let p2 = &(*(p));
diff --git a/test/intrinsics/arrayLength/via_let_no_struct.wgsl b/test/intrinsics/arrayLength/via_let_no_struct.wgsl
index 83ab810..203f0e0 100644
--- a/test/intrinsics/arrayLength/via_let_no_struct.wgsl
+++ b/test/intrinsics/arrayLength/via_let_no_struct.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let p = &G;
     let p2 = p;
diff --git a/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.wgsl b/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.wgsl
index 731ba0c..3e07603 100644
--- a/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var<storage, read> G : array<i32>;
+@group(0) @binding(0) var<storage, read> G : array<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p = &(G);
   let p2 = p;
diff --git a/test/intrinsics/degrees.spvasm.expected.wgsl b/test/intrinsics/degrees.spvasm.expected.wgsl
index a46678b..be5b765 100644
--- a/test/intrinsics/degrees.spvasm.expected.wgsl
+++ b/test/intrinsics/degrees.spvasm.expected.wgsl
@@ -7,7 +7,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/intrinsics/frexp.wgsl b/test/intrinsics/frexp.wgsl
index fed55e5..f4c30d4 100644
--- a/test/intrinsics/frexp.wgsl
+++ b/test/intrinsics/frexp.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let res = frexp(1.23);
     let exp : i32 = res.exp;
diff --git a/test/intrinsics/frexp.wgsl.expected.wgsl b/test/intrinsics/frexp.wgsl.expected.wgsl
index 519ffb6..50cbd40 100644
--- a/test/intrinsics/frexp.wgsl.expected.wgsl
+++ b/test/intrinsics/frexp.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let res = frexp(1.230000019);
   let exp : i32 = res.exp;
diff --git a/test/intrinsics/gen/abs/002533.wgsl b/test/intrinsics/gen/abs/002533.wgsl
index ca44323..1a7c3f8 100644
--- a/test/intrinsics/gen/abs/002533.wgsl
+++ b/test/intrinsics/gen/abs/002533.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = abs(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_002533();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_002533();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_002533();
 }
diff --git a/test/intrinsics/gen/abs/002533.wgsl.expected.wgsl b/test/intrinsics/gen/abs/002533.wgsl.expected.wgsl
index e9cb96a..8edc059 100644
--- a/test/intrinsics/gen/abs/002533.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/002533.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = abs(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_002533();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_002533();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_002533();
 }
diff --git a/test/intrinsics/gen/abs/005174.wgsl b/test/intrinsics/gen/abs/005174.wgsl
index 4e96bdf..ecbf409 100644
--- a/test/intrinsics/gen/abs/005174.wgsl
+++ b/test/intrinsics/gen/abs/005174.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = abs(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_005174();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_005174();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_005174();
 }
diff --git a/test/intrinsics/gen/abs/005174.wgsl.expected.wgsl b/test/intrinsics/gen/abs/005174.wgsl.expected.wgsl
index 091464d..0675fff 100644
--- a/test/intrinsics/gen/abs/005174.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/005174.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = abs(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_005174();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_005174();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_005174();
 }
diff --git a/test/intrinsics/gen/abs/1ce782.wgsl b/test/intrinsics/gen/abs/1ce782.wgsl
index 8d23e13..7a7666e 100644
--- a/test/intrinsics/gen/abs/1ce782.wgsl
+++ b/test/intrinsics/gen/abs/1ce782.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = abs(vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_1ce782();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_1ce782();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_1ce782();
 }
diff --git a/test/intrinsics/gen/abs/1ce782.wgsl.expected.wgsl b/test/intrinsics/gen/abs/1ce782.wgsl.expected.wgsl
index dfba5c2..02c1c23 100644
--- a/test/intrinsics/gen/abs/1ce782.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/1ce782.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = abs(vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_1ce782();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_1ce782();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_1ce782();
 }
diff --git a/test/intrinsics/gen/abs/1e9d53.wgsl b/test/intrinsics/gen/abs/1e9d53.wgsl
index f3c08ae..45cac6d 100644
--- a/test/intrinsics/gen/abs/1e9d53.wgsl
+++ b/test/intrinsics/gen/abs/1e9d53.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = abs(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_1e9d53();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_1e9d53();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_1e9d53();
 }
diff --git a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.wgsl b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.wgsl
index 50413db..ba2ae4b 100644
--- a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = abs(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_1e9d53();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_1e9d53();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_1e9d53();
 }
diff --git a/test/intrinsics/gen/abs/467cd1.wgsl b/test/intrinsics/gen/abs/467cd1.wgsl
index 266e0b7..99b46e2 100644
--- a/test/intrinsics/gen/abs/467cd1.wgsl
+++ b/test/intrinsics/gen/abs/467cd1.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = abs(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_467cd1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_467cd1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_467cd1();
 }
diff --git a/test/intrinsics/gen/abs/467cd1.wgsl.expected.wgsl b/test/intrinsics/gen/abs/467cd1.wgsl.expected.wgsl
index c84d397..0af4141 100644
--- a/test/intrinsics/gen/abs/467cd1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/467cd1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = abs(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_467cd1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_467cd1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_467cd1();
 }
diff --git a/test/intrinsics/gen/abs/4ad288.wgsl b/test/intrinsics/gen/abs/4ad288.wgsl
index 38f639b..b342fa7 100644
--- a/test/intrinsics/gen/abs/4ad288.wgsl
+++ b/test/intrinsics/gen/abs/4ad288.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = abs(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_4ad288();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_4ad288();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_4ad288();
 }
diff --git a/test/intrinsics/gen/abs/4ad288.wgsl.expected.wgsl b/test/intrinsics/gen/abs/4ad288.wgsl.expected.wgsl
index 4d60d16..e96f644 100644
--- a/test/intrinsics/gen/abs/4ad288.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/4ad288.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = abs(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_4ad288();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_4ad288();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_4ad288();
 }
diff --git a/test/intrinsics/gen/abs/5ad50a.wgsl b/test/intrinsics/gen/abs/5ad50a.wgsl
index 1e6c034..8cd6725 100644
--- a/test/intrinsics/gen/abs/5ad50a.wgsl
+++ b/test/intrinsics/gen/abs/5ad50a.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = abs(vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_5ad50a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_5ad50a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_5ad50a();
 }
diff --git a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.wgsl b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.wgsl
index 067b739..d1cf47f 100644
--- a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = abs(vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_5ad50a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_5ad50a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_5ad50a();
 }
diff --git a/test/intrinsics/gen/abs/7326de.wgsl b/test/intrinsics/gen/abs/7326de.wgsl
index e7e8563..ce2be53 100644
--- a/test/intrinsics/gen/abs/7326de.wgsl
+++ b/test/intrinsics/gen/abs/7326de.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = abs(vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_7326de();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_7326de();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_7326de();
 }
diff --git a/test/intrinsics/gen/abs/7326de.wgsl.expected.wgsl b/test/intrinsics/gen/abs/7326de.wgsl.expected.wgsl
index 0303cc6..4d07d26 100644
--- a/test/intrinsics/gen/abs/7326de.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/7326de.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = abs(vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_7326de();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_7326de();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_7326de();
 }
diff --git a/test/intrinsics/gen/abs/7f28e6.wgsl b/test/intrinsics/gen/abs/7f28e6.wgsl
index 0af90f4..cbdeef0 100644
--- a/test/intrinsics/gen/abs/7f28e6.wgsl
+++ b/test/intrinsics/gen/abs/7f28e6.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = abs(vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_7f28e6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_7f28e6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_7f28e6();
 }
diff --git a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.wgsl b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.wgsl
index 698a0fb..8f83b40 100644
--- a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = abs(vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_7f28e6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_7f28e6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_7f28e6();
 }
diff --git a/test/intrinsics/gen/abs/7faa9e.wgsl b/test/intrinsics/gen/abs/7faa9e.wgsl
index bdc81c0..8b250ee 100644
--- a/test/intrinsics/gen/abs/7faa9e.wgsl
+++ b/test/intrinsics/gen/abs/7faa9e.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = abs(vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_7faa9e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_7faa9e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_7faa9e();
 }
diff --git a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.wgsl b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.wgsl
index 9929c78..c8e0001 100644
--- a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = abs(vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_7faa9e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_7faa9e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_7faa9e();
 }
diff --git a/test/intrinsics/gen/abs/9c80a6.wgsl b/test/intrinsics/gen/abs/9c80a6.wgsl
index ba87252..71ef852 100644
--- a/test/intrinsics/gen/abs/9c80a6.wgsl
+++ b/test/intrinsics/gen/abs/9c80a6.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = abs(vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_9c80a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_9c80a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_9c80a6();
 }
diff --git a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.wgsl b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.wgsl
index c3190a5..6e3519d 100644
--- a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = abs(vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_9c80a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_9c80a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_9c80a6();
 }
diff --git a/test/intrinsics/gen/abs/b96037.wgsl b/test/intrinsics/gen/abs/b96037.wgsl
index 5112a85..dddc75e 100644
--- a/test/intrinsics/gen/abs/b96037.wgsl
+++ b/test/intrinsics/gen/abs/b96037.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = abs(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_b96037();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_b96037();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_b96037();
 }
diff --git a/test/intrinsics/gen/abs/b96037.wgsl.expected.wgsl b/test/intrinsics/gen/abs/b96037.wgsl.expected.wgsl
index d5b6041..22c47c2 100644
--- a/test/intrinsics/gen/abs/b96037.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/abs/b96037.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = abs(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   abs_b96037();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   abs_b96037();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   abs_b96037();
 }
diff --git a/test/intrinsics/gen/acos/489247.wgsl b/test/intrinsics/gen/acos/489247.wgsl
index c8251f8..d2f227a 100644
--- a/test/intrinsics/gen/acos/489247.wgsl
+++ b/test/intrinsics/gen/acos/489247.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = acos(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_489247();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_489247();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_489247();
 }
diff --git a/test/intrinsics/gen/acos/489247.wgsl.expected.wgsl b/test/intrinsics/gen/acos/489247.wgsl.expected.wgsl
index a67ffde..d8570fb 100644
--- a/test/intrinsics/gen/acos/489247.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/acos/489247.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = acos(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_489247();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_489247();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_489247();
 }
diff --git a/test/intrinsics/gen/acos/8e2acf.wgsl b/test/intrinsics/gen/acos/8e2acf.wgsl
index 17d366e..e085fae 100644
--- a/test/intrinsics/gen/acos/8e2acf.wgsl
+++ b/test/intrinsics/gen/acos/8e2acf.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = acos(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_8e2acf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_8e2acf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_8e2acf();
 }
diff --git a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.wgsl b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.wgsl
index 756d867..c03ab26 100644
--- a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = acos(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_8e2acf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_8e2acf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_8e2acf();
 }
diff --git a/test/intrinsics/gen/acos/a610c4.wgsl b/test/intrinsics/gen/acos/a610c4.wgsl
index 9d4a273..7f7be34 100644
--- a/test/intrinsics/gen/acos/a610c4.wgsl
+++ b/test/intrinsics/gen/acos/a610c4.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = acos(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_a610c4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_a610c4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_a610c4();
 }
diff --git a/test/intrinsics/gen/acos/a610c4.wgsl.expected.wgsl b/test/intrinsics/gen/acos/a610c4.wgsl.expected.wgsl
index 818b4ba..24807be 100644
--- a/test/intrinsics/gen/acos/a610c4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/acos/a610c4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = acos(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_a610c4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_a610c4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_a610c4();
 }
diff --git a/test/intrinsics/gen/acos/dfc915.wgsl b/test/intrinsics/gen/acos/dfc915.wgsl
index 1b65a6c..5e27bf8 100644
--- a/test/intrinsics/gen/acos/dfc915.wgsl
+++ b/test/intrinsics/gen/acos/dfc915.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = acos(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_dfc915();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_dfc915();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_dfc915();
 }
diff --git a/test/intrinsics/gen/acos/dfc915.wgsl.expected.wgsl b/test/intrinsics/gen/acos/dfc915.wgsl.expected.wgsl
index 631502c..e16d1eab 100644
--- a/test/intrinsics/gen/acos/dfc915.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/acos/dfc915.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = acos(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   acos_dfc915();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   acos_dfc915();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   acos_dfc915();
 }
diff --git a/test/intrinsics/gen/all/353d6a.wgsl b/test/intrinsics/gen/all/353d6a.wgsl
index cfaab0b..fbfe933 100644
--- a/test/intrinsics/gen/all/353d6a.wgsl
+++ b/test/intrinsics/gen/all/353d6a.wgsl
@@ -28,18 +28,18 @@
   var res: bool = all(bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_353d6a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_353d6a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_353d6a();
 }
diff --git a/test/intrinsics/gen/all/353d6a.wgsl.expected.wgsl b/test/intrinsics/gen/all/353d6a.wgsl.expected.wgsl
index c1da74d..b1ae87d 100644
--- a/test/intrinsics/gen/all/353d6a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/all/353d6a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = all(bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_353d6a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_353d6a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_353d6a();
 }
diff --git a/test/intrinsics/gen/all/986c7b.wgsl b/test/intrinsics/gen/all/986c7b.wgsl
index 9f60484..515f3a3 100644
--- a/test/intrinsics/gen/all/986c7b.wgsl
+++ b/test/intrinsics/gen/all/986c7b.wgsl
@@ -28,18 +28,18 @@
   var res: bool = all(vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_986c7b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_986c7b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_986c7b();
 }
diff --git a/test/intrinsics/gen/all/986c7b.wgsl.expected.wgsl b/test/intrinsics/gen/all/986c7b.wgsl.expected.wgsl
index e1242e8..9195321 100644
--- a/test/intrinsics/gen/all/986c7b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/all/986c7b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = all(vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_986c7b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_986c7b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_986c7b();
 }
diff --git a/test/intrinsics/gen/all/bd2dba.wgsl b/test/intrinsics/gen/all/bd2dba.wgsl
index d098c18..657678f 100644
--- a/test/intrinsics/gen/all/bd2dba.wgsl
+++ b/test/intrinsics/gen/all/bd2dba.wgsl
@@ -28,18 +28,18 @@
   var res: bool = all(vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_bd2dba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_bd2dba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_bd2dba();
 }
diff --git a/test/intrinsics/gen/all/bd2dba.wgsl.expected.wgsl b/test/intrinsics/gen/all/bd2dba.wgsl.expected.wgsl
index b527c6b..9ec977d 100644
--- a/test/intrinsics/gen/all/bd2dba.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/all/bd2dba.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = all(vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_bd2dba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_bd2dba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_bd2dba();
 }
diff --git a/test/intrinsics/gen/all/f46790.wgsl b/test/intrinsics/gen/all/f46790.wgsl
index c744d5d..875da79 100644
--- a/test/intrinsics/gen/all/f46790.wgsl
+++ b/test/intrinsics/gen/all/f46790.wgsl
@@ -28,18 +28,18 @@
   var res: bool = all(vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_f46790();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_f46790();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_f46790();
 }
diff --git a/test/intrinsics/gen/all/f46790.wgsl.expected.wgsl b/test/intrinsics/gen/all/f46790.wgsl.expected.wgsl
index 3dbfa28..a222bb5 100644
--- a/test/intrinsics/gen/all/f46790.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/all/f46790.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = all(vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   all_f46790();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   all_f46790();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   all_f46790();
 }
diff --git a/test/intrinsics/gen/any/083428.wgsl b/test/intrinsics/gen/any/083428.wgsl
index df698b1..8aecc0f 100644
--- a/test/intrinsics/gen/any/083428.wgsl
+++ b/test/intrinsics/gen/any/083428.wgsl
@@ -28,18 +28,18 @@
   var res: bool = any(vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_083428();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_083428();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_083428();
 }
diff --git a/test/intrinsics/gen/any/083428.wgsl.expected.wgsl b/test/intrinsics/gen/any/083428.wgsl.expected.wgsl
index 12391bd..acd23c8 100644
--- a/test/intrinsics/gen/any/083428.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/any/083428.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = any(vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_083428();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_083428();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_083428();
 }
diff --git a/test/intrinsics/gen/any/0e3e58.wgsl b/test/intrinsics/gen/any/0e3e58.wgsl
index 08998fc..71bda25 100644
--- a/test/intrinsics/gen/any/0e3e58.wgsl
+++ b/test/intrinsics/gen/any/0e3e58.wgsl
@@ -28,18 +28,18 @@
   var res: bool = any(vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_0e3e58();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_0e3e58();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_0e3e58();
 }
diff --git a/test/intrinsics/gen/any/0e3e58.wgsl.expected.wgsl b/test/intrinsics/gen/any/0e3e58.wgsl.expected.wgsl
index d8c6a41..c94d9a1 100644
--- a/test/intrinsics/gen/any/0e3e58.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/any/0e3e58.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = any(vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_0e3e58();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_0e3e58();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_0e3e58();
 }
diff --git a/test/intrinsics/gen/any/2ab91a.wgsl b/test/intrinsics/gen/any/2ab91a.wgsl
index 6eac503..6b6b067 100644
--- a/test/intrinsics/gen/any/2ab91a.wgsl
+++ b/test/intrinsics/gen/any/2ab91a.wgsl
@@ -28,18 +28,18 @@
   var res: bool = any(bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_2ab91a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_2ab91a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_2ab91a();
 }
diff --git a/test/intrinsics/gen/any/2ab91a.wgsl.expected.wgsl b/test/intrinsics/gen/any/2ab91a.wgsl.expected.wgsl
index a672f82..283ab5a 100644
--- a/test/intrinsics/gen/any/2ab91a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/any/2ab91a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = any(bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_2ab91a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_2ab91a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_2ab91a();
 }
diff --git a/test/intrinsics/gen/any/e755c1.wgsl b/test/intrinsics/gen/any/e755c1.wgsl
index 4104c37..b27d31a 100644
--- a/test/intrinsics/gen/any/e755c1.wgsl
+++ b/test/intrinsics/gen/any/e755c1.wgsl
@@ -28,18 +28,18 @@
   var res: bool = any(vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_e755c1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_e755c1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_e755c1();
 }
diff --git a/test/intrinsics/gen/any/e755c1.wgsl.expected.wgsl b/test/intrinsics/gen/any/e755c1.wgsl.expected.wgsl
index b8da397..bf47826 100644
--- a/test/intrinsics/gen/any/e755c1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/any/e755c1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = any(vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   any_e755c1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   any_e755c1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   any_e755c1();
 }
diff --git a/test/intrinsics/gen/arrayLength/1588cd.wgsl b/test/intrinsics/gen/arrayLength/1588cd.wgsl
index f4a4123..727e8bd 100644
--- a/test/intrinsics/gen/arrayLength/1588cd.wgsl
+++ b/test/intrinsics/gen/arrayLength/1588cd.wgsl
@@ -25,25 +25,25 @@
 struct SB_RO {
   arg_0: array<i32>;
 };
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 
 // fn arrayLength(ptr<storage, array<i32>, read>) -> u32
 fn arrayLength_1588cd() {
   var res: u32 = arrayLength(&sb_ro.arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_1588cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_1588cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_1588cd();
 }
diff --git a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl
index 645da49..bbf5a36 100644
--- a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   arg_0 : array<i32>;
 }
 
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 
 fn arrayLength_1588cd() {
   var res : u32 = arrayLength(&(sb_ro.arg_0));
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_1588cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_1588cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_1588cd();
 }
diff --git a/test/intrinsics/gen/arrayLength/61b1c7.wgsl b/test/intrinsics/gen/arrayLength/61b1c7.wgsl
index 8716a4e..02b7f3d 100644
--- a/test/intrinsics/gen/arrayLength/61b1c7.wgsl
+++ b/test/intrinsics/gen/arrayLength/61b1c7.wgsl
@@ -25,25 +25,25 @@
 struct SB_RW {
   arg_0: array<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn arrayLength(ptr<storage, array<i32>, read_write>) -> u32
 fn arrayLength_61b1c7() {
   var res: u32 = arrayLength(&sb_rw.arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_61b1c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_61b1c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_61b1c7();
 }
diff --git a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl
index f1d33c2..fdd6856 100644
--- a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   arg_0 : array<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn arrayLength_61b1c7() {
   var res : u32 = arrayLength(&(sb_rw.arg_0));
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_61b1c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_61b1c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_61b1c7();
 }
diff --git a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl
index c367b4d..192d288 100644
--- a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl
+++ b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl
@@ -25,25 +25,25 @@
 struct SB_RO {
   arg_0: array<f32>;
 };
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 
 // fn arrayLength(ptr<storage, array<f32>, read>) -> u32
 fn arrayLength_a0f5ca() {
   var res: u32 = arrayLength(&sb_ro.arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_a0f5ca();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_a0f5ca();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_a0f5ca();
 }
diff --git a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl
index 85468b4..d26abde 100644
--- a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   arg_0 : array<f32>;
 }
 
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 
 fn arrayLength_a0f5ca() {
   var res : u32 = arrayLength(&(sb_ro.arg_0));
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_a0f5ca();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_a0f5ca();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_a0f5ca();
 }
diff --git a/test/intrinsics/gen/arrayLength/cdd123.wgsl b/test/intrinsics/gen/arrayLength/cdd123.wgsl
index cd4b56a..03948a9 100644
--- a/test/intrinsics/gen/arrayLength/cdd123.wgsl
+++ b/test/intrinsics/gen/arrayLength/cdd123.wgsl
@@ -25,25 +25,25 @@
 struct SB_RW {
   arg_0: array<f32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn arrayLength(ptr<storage, array<f32>, read_write>) -> u32
 fn arrayLength_cdd123() {
   var res: u32 = arrayLength(&sb_rw.arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_cdd123();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_cdd123();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_cdd123();
 }
diff --git a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl
index 65a2077..382f356 100644
--- a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   arg_0 : array<f32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn arrayLength_cdd123() {
   var res : u32 = arrayLength(&(sb_rw.arg_0));
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_cdd123();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_cdd123();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_cdd123();
 }
diff --git a/test/intrinsics/gen/arrayLength/cfca0a.wgsl b/test/intrinsics/gen/arrayLength/cfca0a.wgsl
index c89fb1d..e3f72dd 100644
--- a/test/intrinsics/gen/arrayLength/cfca0a.wgsl
+++ b/test/intrinsics/gen/arrayLength/cfca0a.wgsl
@@ -25,25 +25,25 @@
 struct SB_RO {
   arg_0: array<u32>;
 };
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 
 // fn arrayLength(ptr<storage, array<u32>, read>) -> u32
 fn arrayLength_cfca0a() {
   var res: u32 = arrayLength(&sb_ro.arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_cfca0a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_cfca0a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_cfca0a();
 }
diff --git a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl
index 8930be0..5780c79 100644
--- a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   arg_0 : array<u32>;
 }
 
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 
 fn arrayLength_cfca0a() {
   var res : u32 = arrayLength(&(sb_ro.arg_0));
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_cfca0a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_cfca0a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_cfca0a();
 }
diff --git a/test/intrinsics/gen/arrayLength/eb510f.wgsl b/test/intrinsics/gen/arrayLength/eb510f.wgsl
index 0f7df32..86133e5 100644
--- a/test/intrinsics/gen/arrayLength/eb510f.wgsl
+++ b/test/intrinsics/gen/arrayLength/eb510f.wgsl
@@ -25,25 +25,25 @@
 struct SB_RW {
   arg_0: array<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn arrayLength(ptr<storage, array<u32>, read_write>) -> u32
 fn arrayLength_eb510f() {
   var res: u32 = arrayLength(&sb_rw.arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_eb510f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_eb510f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_eb510f();
 }
diff --git a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl
index 5b85130..fb67885 100644
--- a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   arg_0 : array<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn arrayLength_eb510f() {
   var res : u32 = arrayLength(&(sb_rw.arg_0));
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   arrayLength_eb510f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   arrayLength_eb510f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   arrayLength_eb510f();
 }
diff --git a/test/intrinsics/gen/asin/064953.wgsl b/test/intrinsics/gen/asin/064953.wgsl
index 26e49e7..f72a8c5 100644
--- a/test/intrinsics/gen/asin/064953.wgsl
+++ b/test/intrinsics/gen/asin/064953.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = asin(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_064953();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_064953();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_064953();
 }
diff --git a/test/intrinsics/gen/asin/064953.wgsl.expected.wgsl b/test/intrinsics/gen/asin/064953.wgsl.expected.wgsl
index 4c3bf70..ed58d99 100644
--- a/test/intrinsics/gen/asin/064953.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/asin/064953.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = asin(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_064953();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_064953();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_064953();
 }
diff --git a/test/intrinsics/gen/asin/7b6a44.wgsl b/test/intrinsics/gen/asin/7b6a44.wgsl
index cee069c..6369852 100644
--- a/test/intrinsics/gen/asin/7b6a44.wgsl
+++ b/test/intrinsics/gen/asin/7b6a44.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = asin(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_7b6a44();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_7b6a44();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_7b6a44();
 }
diff --git a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.wgsl b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.wgsl
index 44df59b..d70e952 100644
--- a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = asin(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_7b6a44();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_7b6a44();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_7b6a44();
 }
diff --git a/test/intrinsics/gen/asin/8cd9c9.wgsl b/test/intrinsics/gen/asin/8cd9c9.wgsl
index 2f6a3e2..0f7abb0 100644
--- a/test/intrinsics/gen/asin/8cd9c9.wgsl
+++ b/test/intrinsics/gen/asin/8cd9c9.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = asin(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_8cd9c9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_8cd9c9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_8cd9c9();
 }
diff --git a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.wgsl b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.wgsl
index 04131b7..2f4ea23 100644
--- a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = asin(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_8cd9c9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_8cd9c9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_8cd9c9();
 }
diff --git a/test/intrinsics/gen/asin/c0c272.wgsl b/test/intrinsics/gen/asin/c0c272.wgsl
index 290798a..b673fe3 100644
--- a/test/intrinsics/gen/asin/c0c272.wgsl
+++ b/test/intrinsics/gen/asin/c0c272.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = asin(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_c0c272();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_c0c272();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_c0c272();
 }
diff --git a/test/intrinsics/gen/asin/c0c272.wgsl.expected.wgsl b/test/intrinsics/gen/asin/c0c272.wgsl.expected.wgsl
index 08eb0ce..d3a8d05 100644
--- a/test/intrinsics/gen/asin/c0c272.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/asin/c0c272.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = asin(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   asin_c0c272();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   asin_c0c272();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   asin_c0c272();
 }
diff --git a/test/intrinsics/gen/atan/02979a.wgsl b/test/intrinsics/gen/atan/02979a.wgsl
index cf0d1be..fb9d08232 100644
--- a/test/intrinsics/gen/atan/02979a.wgsl
+++ b/test/intrinsics/gen/atan/02979a.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = atan(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_02979a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_02979a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_02979a();
 }
diff --git a/test/intrinsics/gen/atan/02979a.wgsl.expected.wgsl b/test/intrinsics/gen/atan/02979a.wgsl.expected.wgsl
index 9730fb2..75af743 100644
--- a/test/intrinsics/gen/atan/02979a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan/02979a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = atan(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_02979a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_02979a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_02979a();
 }
diff --git a/test/intrinsics/gen/atan/331e6d.wgsl b/test/intrinsics/gen/atan/331e6d.wgsl
index 23d5f42..e090a63 100644
--- a/test/intrinsics/gen/atan/331e6d.wgsl
+++ b/test/intrinsics/gen/atan/331e6d.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = atan(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_331e6d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_331e6d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_331e6d();
 }
diff --git a/test/intrinsics/gen/atan/331e6d.wgsl.expected.wgsl b/test/intrinsics/gen/atan/331e6d.wgsl.expected.wgsl
index 0b9de68..7bc7982 100644
--- a/test/intrinsics/gen/atan/331e6d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan/331e6d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = atan(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_331e6d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_331e6d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_331e6d();
 }
diff --git a/test/intrinsics/gen/atan/a8b696.wgsl b/test/intrinsics/gen/atan/a8b696.wgsl
index f73df4c..8b1c3cf 100644
--- a/test/intrinsics/gen/atan/a8b696.wgsl
+++ b/test/intrinsics/gen/atan/a8b696.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = atan(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_a8b696();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_a8b696();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_a8b696();
 }
diff --git a/test/intrinsics/gen/atan/a8b696.wgsl.expected.wgsl b/test/intrinsics/gen/atan/a8b696.wgsl.expected.wgsl
index 004b7ae..70b4684 100644
--- a/test/intrinsics/gen/atan/a8b696.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan/a8b696.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = atan(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_a8b696();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_a8b696();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_a8b696();
 }
diff --git a/test/intrinsics/gen/atan/ad96e4.wgsl b/test/intrinsics/gen/atan/ad96e4.wgsl
index 7995257..b334a9e 100644
--- a/test/intrinsics/gen/atan/ad96e4.wgsl
+++ b/test/intrinsics/gen/atan/ad96e4.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = atan(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_ad96e4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_ad96e4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_ad96e4();
 }
diff --git a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.wgsl b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.wgsl
index 07ff1f5..dcf775a 100644
--- a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = atan(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan_ad96e4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan_ad96e4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan_ad96e4();
 }
diff --git a/test/intrinsics/gen/atan2/57fb13.wgsl b/test/intrinsics/gen/atan2/57fb13.wgsl
index c9d3028..c18536f 100644
--- a/test/intrinsics/gen/atan2/57fb13.wgsl
+++ b/test/intrinsics/gen/atan2/57fb13.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = atan2(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_57fb13();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_57fb13();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_57fb13();
 }
diff --git a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.wgsl b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.wgsl
index 09034a8..ec7ff3a 100644
--- a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = atan2(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_57fb13();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_57fb13();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_57fb13();
 }
diff --git a/test/intrinsics/gen/atan2/96057c.wgsl b/test/intrinsics/gen/atan2/96057c.wgsl
index 293ac6f..0955766 100644
--- a/test/intrinsics/gen/atan2/96057c.wgsl
+++ b/test/intrinsics/gen/atan2/96057c.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = atan2(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_96057c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_96057c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_96057c();
 }
diff --git a/test/intrinsics/gen/atan2/96057c.wgsl.expected.wgsl b/test/intrinsics/gen/atan2/96057c.wgsl.expected.wgsl
index a60ced6..78abdd4 100644
--- a/test/intrinsics/gen/atan2/96057c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan2/96057c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = atan2(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_96057c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_96057c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_96057c();
 }
diff --git a/test/intrinsics/gen/atan2/a70d0d.wgsl b/test/intrinsics/gen/atan2/a70d0d.wgsl
index a12f308..87a3c7a 100644
--- a/test/intrinsics/gen/atan2/a70d0d.wgsl
+++ b/test/intrinsics/gen/atan2/a70d0d.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = atan2(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_a70d0d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_a70d0d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_a70d0d();
 }
diff --git a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.wgsl b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.wgsl
index a20e681..9b32967 100644
--- a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = atan2(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_a70d0d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_a70d0d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_a70d0d();
 }
diff --git a/test/intrinsics/gen/atan2/ae713e.wgsl b/test/intrinsics/gen/atan2/ae713e.wgsl
index 9098c1d..381ca2a 100644
--- a/test/intrinsics/gen/atan2/ae713e.wgsl
+++ b/test/intrinsics/gen/atan2/ae713e.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = atan2(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_ae713e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_ae713e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_ae713e();
 }
diff --git a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.wgsl b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.wgsl
index 875e4df..d765ab4 100644
--- a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = atan2(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   atan2_ae713e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atan2_ae713e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atan2_ae713e();
 }
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl b/test/intrinsics/gen/atomicAdd/794055.wgsl
index 25241b2..5963b4f 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicAdd(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_794055();
 }
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl
index 833160d..57290be 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicAdd(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_794055();
 }
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl
index 0b728d5..aae79c2 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicAdd(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicAdd_8a199a() {
   var res: u32 = atomicAdd(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAdd_8a199a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_8a199a();
 }
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
index 432caa9..096bd43 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicAdd_8a199a() {
   var res : u32 = atomicAdd(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAdd_8a199a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_8a199a();
 }
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl
index 88fd8f6..4cf4eb6 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicAdd(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicAdd_d32fe4() {
   var res: i32 = atomicAdd(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAdd_d32fe4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_d32fe4();
 }
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
index 5bc41ca..6666896 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicAdd_d32fe4() {
   var res : i32 = atomicAdd(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAdd_d32fe4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_d32fe4();
 }
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl
index 2508e9f..55329bc 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicAdd(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_d5db1d();
 }
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl
index 116ecfe..e7381bb 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicAdd(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAdd_d5db1d();
 }
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl b/test/intrinsics/gen/atomicAnd/152966.wgsl
index deb1160..b99ab19 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicAnd(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicAnd_152966() {
   var res: i32 = atomicAnd(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAnd_152966();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_152966();
 }
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
index c0be5bc..5da1a1d 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicAnd_152966() {
   var res : i32 = atomicAnd(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAnd_152966();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_152966();
 }
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl
index b380519..567863d 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicAnd(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_34edd3();
 }
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl
index ba6645d..89cec48 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicAnd(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_34edd3();
 }
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl
index 76e9305..9eef5c3 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicAnd(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_45a819();
 }
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl
index 1b59ff6..c022cee 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicAnd(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_45a819();
 }
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl
index 414f521..042cba6 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicAnd(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicAnd_85a8d9() {
   var res: u32 = atomicAnd(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAnd_85a8d9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_85a8d9();
 }
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
index c63138b..61780ce 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicAnd_85a8d9() {
   var res : u32 = atomicAnd(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicAnd_85a8d9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicAnd_85a8d9();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl
index ebbe26f..3735ad4 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicCompareExchangeWeak(ptr<storage, atomic<i32>, read_write>, i32, i32) -> vec2<i32>
 fn atomicCompareExchangeWeak_12871c() {
   var res: vec2<i32> = atomicCompareExchangeWeak(&sb_rw.arg_0, 1, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicCompareExchangeWeak_12871c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_12871c();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
index eed9b1f..aa49ba9 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicCompareExchangeWeak_12871c() {
   var res : vec2<i32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicCompareExchangeWeak_12871c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_12871c();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl
index ac2e91d..be43eb0 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicCompareExchangeWeak(ptr<storage, atomic<u32>, read_write>, u32, u32) -> vec2<u32>
 fn atomicCompareExchangeWeak_6673da() {
   var res: vec2<u32> = atomicCompareExchangeWeak(&sb_rw.arg_0, 1u, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicCompareExchangeWeak_6673da();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_6673da();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
index ea4899a..3970296 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicCompareExchangeWeak_6673da() {
   var res : vec2<u32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1u, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicCompareExchangeWeak_6673da();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_6673da();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl
index 78a5bd0..58bf4b5 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl
@@ -29,7 +29,7 @@
   var res: vec2<i32> = atomicCompareExchangeWeak(&arg_0, 1, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_89ea3b();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl
index 152f1cd..4357511 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : vec2<i32> = atomicCompareExchangeWeak(&(arg_0), 1, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_89ea3b();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl
index a73436f..38cf645 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl
@@ -29,7 +29,7 @@
   var res: vec2<u32> = atomicCompareExchangeWeak(&arg_0, 1u, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_b2ab2c();
 }
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl
index f920acf..d53e099 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : vec2<u32> = atomicCompareExchangeWeak(&(arg_0), 1u, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicCompareExchangeWeak_b2ab2c();
 }
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl
index 4e79f0d..44ac264 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicExchange(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_0a5dca();
 }
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl
index aba05aa..a7acabd 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicExchange(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_0a5dca();
 }
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl
index 6a5c6f2..fc014ee 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicExchange(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicExchange_d59712() {
   var res: u32 = atomicExchange(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicExchange_d59712();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_d59712();
 }
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
index 9970c9b..0930bd7 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicExchange_d59712() {
   var res : u32 = atomicExchange(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicExchange_d59712();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_d59712();
 }
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl
index 8f2acd0..f52534a 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicExchange(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_e114ba();
 }
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl
index 0384fca..9735838 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicExchange(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_e114ba();
 }
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl
index 990cfb4..be22ff9 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicExchange(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicExchange_f2e22f() {
   var res: i32 = atomicExchange(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicExchange_f2e22f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_f2e22f();
 }
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
index 511c02b..79704e4 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicExchange_f2e22f() {
   var res : i32 = atomicExchange(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicExchange_f2e22f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicExchange_f2e22f();
 }
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl
index 98dd4f5..0981e05 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicLoad(ptr<storage, atomic<i32>, read_write>) -> i32
 fn atomicLoad_0806ad() {
   var res: i32 = atomicLoad(&sb_rw.arg_0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicLoad_0806ad();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_0806ad();
 }
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
index b0f3f7d..7396ee2 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicLoad_0806ad() {
   var res : i32 = atomicLoad(&(sb_rw.arg_0));
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicLoad_0806ad();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_0806ad();
 }
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl
index 622c033..3c51abc 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicLoad(&arg_0);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_361bf1();
 }
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl
index ff710c7..1040bf2 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicLoad(&(arg_0));
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_361bf1();
 }
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl
index c24843d..7585c6f 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicLoad(&arg_0);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_afcc03();
 }
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl
index 72d9325..e39317d 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicLoad(&(arg_0));
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_afcc03();
 }
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl
index 3c8ea5e..d337a1e 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicLoad(ptr<storage, atomic<u32>, read_write>) -> u32
 fn atomicLoad_fe6cc3() {
   var res: u32 = atomicLoad(&sb_rw.arg_0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicLoad_fe6cc3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_fe6cc3();
 }
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
index a4b878b..28eca60 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicLoad_fe6cc3() {
   var res : u32 = atomicLoad(&(sb_rw.arg_0));
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicLoad_fe6cc3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicLoad_fe6cc3();
 }
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl
index 8c53dfa..7f2e69c 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicMax(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicMax_51b9be() {
   var res: u32 = atomicMax(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMax_51b9be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_51b9be();
 }
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
index 3f36fbc..985c763 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicMax_51b9be() {
   var res : u32 = atomicMax(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMax_51b9be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_51b9be();
 }
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl
index 74431a7..603ea33 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicMax(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicMax_92aa72() {
   var res: i32 = atomicMax(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMax_92aa72();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_92aa72();
 }
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
index d1c9bea..050d266 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicMax_92aa72() {
   var res : i32 = atomicMax(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMax_92aa72();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_92aa72();
 }
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl
index f3e4ef9..f6c65cf 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicMax(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_a89cc3();
 }
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl
index a383c70..d36703e 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicMax(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_a89cc3();
 }
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl
index a5ed85b..c6c4b60 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicMax(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_beccfc();
 }
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl
index d468d95..f14f91a 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicMax(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMax_beccfc();
 }
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl b/test/intrinsics/gen/atomicMin/278235.wgsl
index c5f1816..2a0cf13 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicMin(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_278235();
 }
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl
index c3b237c..981a7b3 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicMin(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_278235();
 }
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl b/test/intrinsics/gen/atomicMin/69d383.wgsl
index 79c5cae..41b6284 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicMin(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_69d383();
 }
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl
index baff1a6..034d1af 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicMin(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_69d383();
 }
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl
index 8f50406..9512528 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicMin(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicMin_8e38dc() {
   var res: i32 = atomicMin(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMin_8e38dc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_8e38dc();
 }
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
index ef74988..445c42c 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicMin_8e38dc() {
   var res : i32 = atomicMin(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMin_8e38dc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_8e38dc();
 }
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl
index afcf5d3..fe5bb45 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicMin(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicMin_c67a74() {
   var res: u32 = atomicMin(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMin_c67a74();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_c67a74();
 }
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
index 1e1fb28..85296e7 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicMin_c67a74() {
   var res : u32 = atomicMin(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicMin_c67a74();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicMin_c67a74();
 }
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl
index 0a2f8c6..be6bc51 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicOr(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_5e3d61();
 }
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl
index a06bab1..00f3e66 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicOr(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_5e3d61();
 }
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl
index c90026e..356f0d0 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicOr(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicOr_5e95d4() {
   var res: u32 = atomicOr(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicOr_5e95d4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_5e95d4();
 }
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
index a483962..78414eb 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicOr_5e95d4() {
   var res : u32 = atomicOr(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicOr_5e95d4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_5e95d4();
 }
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl
index 7102b0c..c686a28 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicOr(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicOr_8d96a0() {
   var res: i32 = atomicOr(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicOr_8d96a0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_8d96a0();
 }
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
index 57de392..9ce6bd6 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicOr_8d96a0() {
   var res : i32 = atomicOr(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicOr_8d96a0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_8d96a0();
 }
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl b/test/intrinsics/gen/atomicOr/d09248.wgsl
index b9280ec..ead0c34 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicOr(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_d09248();
 }
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl
index d517bab..c28f1c7 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicOr(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicOr_d09248();
 }
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl b/test/intrinsics/gen/atomicStore/726882.wgsl
index f6066f2..3994efb 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl
@@ -29,7 +29,7 @@
   atomicStore(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_726882();
 }
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl
index e275dcf..d81b71e 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   atomicStore(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_726882();
 }
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl
index 8906c61..3ce1a43 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl
@@ -29,7 +29,7 @@
   atomicStore(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_8bea94();
 }
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl
index 22cd2b0..2616d87 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   atomicStore(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_8bea94();
 }
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl
index 5961171..b9cb390 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicStore(ptr<storage, atomic<u32>, read_write>, u32)
 fn atomicStore_cdc29e() {
   atomicStore(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicStore_cdc29e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_cdc29e();
 }
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
index 9f19d43..d0b2386 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicStore_cdc29e() {
   atomicStore(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicStore_cdc29e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_cdc29e();
 }
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl
index cbbec6e..a4ff095 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicStore(ptr<storage, atomic<i32>, read_write>, i32)
 fn atomicStore_d1e9a6() {
   atomicStore(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicStore_d1e9a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_d1e9a6();
 }
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
index 803cb0d..5518552 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicStore_d1e9a6() {
   atomicStore(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicStore_d1e9a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicStore_d1e9a6();
 }
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl b/test/intrinsics/gen/atomicSub/051100.wgsl
index d8083ad..698b794 100644
--- a/test/intrinsics/gen/atomicSub/051100.wgsl
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicSub(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicSub_051100() {
   var res: i32 = atomicSub(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicSub_051100();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_051100();
 }
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl
index 1059294..27b8857 100644
--- a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicSub_051100() {
   var res : i32 = atomicSub(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicSub_051100();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_051100();
 }
diff --git a/test/intrinsics/gen/atomicSub/0d26c2.wgsl b/test/intrinsics/gen/atomicSub/0d26c2.wgsl
index 0aab47d..84cfa43 100644
--- a/test/intrinsics/gen/atomicSub/0d26c2.wgsl
+++ b/test/intrinsics/gen/atomicSub/0d26c2.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicSub(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_0d26c2();
 }
diff --git a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.wgsl b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.wgsl
index c5c104b..6b75ecb 100644
--- a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicSub(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_0d26c2();
 }
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl
index a8ad318..e46889e 100644
--- a/test/intrinsics/gen/atomicSub/15bfc9.wgsl
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicSub(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicSub_15bfc9() {
   var res: u32 = atomicSub(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicSub_15bfc9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_15bfc9();
 }
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl
index 26c3cbe..537edd1 100644
--- a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicSub_15bfc9() {
   var res : u32 = atomicSub(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicSub_15bfc9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_15bfc9();
 }
diff --git a/test/intrinsics/gen/atomicSub/77883a.wgsl b/test/intrinsics/gen/atomicSub/77883a.wgsl
index 8243dad..fc8fa76 100644
--- a/test/intrinsics/gen/atomicSub/77883a.wgsl
+++ b/test/intrinsics/gen/atomicSub/77883a.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicSub(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_77883a();
 }
diff --git a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.wgsl b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.wgsl
index b6452a3..4a49222 100644
--- a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicSub(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicSub_77883a();
 }
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl b/test/intrinsics/gen/atomicXor/54510e.wgsl
index b7c85f0..6928f87 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<u32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicXor(ptr<storage, atomic<u32>, read_write>, u32) -> u32
 fn atomicXor_54510e() {
   var res: u32 = atomicXor(&sb_rw.arg_0, 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicXor_54510e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_54510e();
 }
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
index e0ef7e7..bc674c9 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<u32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicXor_54510e() {
   var res : u32 = atomicXor(&(sb_rw.arg_0), 1u);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicXor_54510e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_54510e();
 }
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl
index 9874eb7..061d653 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl
@@ -29,7 +29,7 @@
   var res: i32 = atomicXor(&arg_0, 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_75dc95();
 }
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl
index 6dd0569..cae6c21 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : i32 = atomicXor(&(arg_0), 1);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_75dc95();
 }
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl
index eb665b4..5bbc251 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl
@@ -25,19 +25,19 @@
 struct SB_RW {
   arg_0: atomic<i32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 // fn atomicXor(ptr<storage, atomic<i32>, read_write>, i32) -> i32
 fn atomicXor_c1b78c() {
   var res: i32 = atomicXor(&sb_rw.arg_0, 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicXor_c1b78c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_c1b78c();
 }
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
index 6840482..0d49f18 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   arg_0 : atomic<i32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 
 fn atomicXor_c1b78c() {
   var res : i32 = atomicXor(&(sb_rw.arg_0), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   atomicXor_c1b78c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_c1b78c();
 }
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl
index 0dbadf1..ce24118 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl
@@ -29,7 +29,7 @@
   var res: u32 = atomicXor(&arg_0, 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_c8e6be();
 }
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl
index 938ed3d..d422ea0 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
   var res : u32 = atomicXor(&(arg_0), 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   atomicXor_c8e6be();
 }
diff --git a/test/intrinsics/gen/ceil/34064b.wgsl b/test/intrinsics/gen/ceil/34064b.wgsl
index 3be3ad0..3d79d91 100644
--- a/test/intrinsics/gen/ceil/34064b.wgsl
+++ b/test/intrinsics/gen/ceil/34064b.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = ceil(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_34064b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_34064b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_34064b();
 }
diff --git a/test/intrinsics/gen/ceil/34064b.wgsl.expected.wgsl b/test/intrinsics/gen/ceil/34064b.wgsl.expected.wgsl
index d67b150..a72e184 100644
--- a/test/intrinsics/gen/ceil/34064b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ceil/34064b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = ceil(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_34064b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_34064b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_34064b();
 }
diff --git a/test/intrinsics/gen/ceil/678655.wgsl b/test/intrinsics/gen/ceil/678655.wgsl
index 0ba06bd..0a49b58 100644
--- a/test/intrinsics/gen/ceil/678655.wgsl
+++ b/test/intrinsics/gen/ceil/678655.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = ceil(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_678655();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_678655();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_678655();
 }
diff --git a/test/intrinsics/gen/ceil/678655.wgsl.expected.wgsl b/test/intrinsics/gen/ceil/678655.wgsl.expected.wgsl
index 139e6de..bb57a0a 100644
--- a/test/intrinsics/gen/ceil/678655.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ceil/678655.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = ceil(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_678655();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_678655();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_678655();
 }
diff --git a/test/intrinsics/gen/ceil/96f597.wgsl b/test/intrinsics/gen/ceil/96f597.wgsl
index 63d6e1a..84647b9 100644
--- a/test/intrinsics/gen/ceil/96f597.wgsl
+++ b/test/intrinsics/gen/ceil/96f597.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = ceil(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_96f597();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_96f597();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_96f597();
 }
diff --git a/test/intrinsics/gen/ceil/96f597.wgsl.expected.wgsl b/test/intrinsics/gen/ceil/96f597.wgsl.expected.wgsl
index 65004c4..bf6d138 100644
--- a/test/intrinsics/gen/ceil/96f597.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ceil/96f597.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = ceil(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_96f597();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_96f597();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_96f597();
 }
diff --git a/test/intrinsics/gen/ceil/b74c16.wgsl b/test/intrinsics/gen/ceil/b74c16.wgsl
index e5ca670..46a48b4 100644
--- a/test/intrinsics/gen/ceil/b74c16.wgsl
+++ b/test/intrinsics/gen/ceil/b74c16.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = ceil(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_b74c16();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_b74c16();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_b74c16();
 }
diff --git a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.wgsl b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.wgsl
index 492a415..c019db4 100644
--- a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = ceil(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ceil_b74c16();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ceil_b74c16();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ceil_b74c16();
 }
diff --git a/test/intrinsics/gen/clamp/0acf8f.wgsl b/test/intrinsics/gen/clamp/0acf8f.wgsl
index 8ef1355..a55d7dc 100644
--- a/test/intrinsics/gen/clamp/0acf8f.wgsl
+++ b/test/intrinsics/gen/clamp/0acf8f.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = clamp(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_0acf8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_0acf8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_0acf8f();
 }
diff --git a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.wgsl
index 08f126c..a6f58e5 100644
--- a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = clamp(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_0acf8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_0acf8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_0acf8f();
 }
diff --git a/test/intrinsics/gen/clamp/1a32e3.wgsl b/test/intrinsics/gen/clamp/1a32e3.wgsl
index a52ae96..723c134 100644
--- a/test/intrinsics/gen/clamp/1a32e3.wgsl
+++ b/test/intrinsics/gen/clamp/1a32e3.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = clamp(vec4<i32>(), vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_1a32e3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_1a32e3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_1a32e3();
 }
diff --git a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.wgsl
index 59887fc..4ca8d1e 100644
--- a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = clamp(vec4<i32>(), vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_1a32e3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_1a32e3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_1a32e3();
 }
diff --git a/test/intrinsics/gen/clamp/2bd567.wgsl b/test/intrinsics/gen/clamp/2bd567.wgsl
index 6e280b5..e8d2ed2 100644
--- a/test/intrinsics/gen/clamp/2bd567.wgsl
+++ b/test/intrinsics/gen/clamp/2bd567.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = clamp(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_2bd567();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_2bd567();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_2bd567();
 }
diff --git a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.wgsl
index 5e338a5..fdd1c3c 100644
--- a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = clamp(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_2bd567();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_2bd567();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_2bd567();
 }
diff --git a/test/intrinsics/gen/clamp/2bde41.wgsl b/test/intrinsics/gen/clamp/2bde41.wgsl
index 7a46d6a..582549c 100644
--- a/test/intrinsics/gen/clamp/2bde41.wgsl
+++ b/test/intrinsics/gen/clamp/2bde41.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = clamp(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_2bde41();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_2bde41();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_2bde41();
 }
diff --git a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.wgsl
index 091e04c..21f3a2d 100644
--- a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = clamp(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_2bde41();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_2bde41();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_2bde41();
 }
diff --git a/test/intrinsics/gen/clamp/548fc7.wgsl b/test/intrinsics/gen/clamp/548fc7.wgsl
index 696b661..8863032 100644
--- a/test/intrinsics/gen/clamp/548fc7.wgsl
+++ b/test/intrinsics/gen/clamp/548fc7.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = clamp(vec3<u32>(), vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_548fc7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_548fc7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_548fc7();
 }
diff --git a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.wgsl
index 67ef881..05f4d9e 100644
--- a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = clamp(vec3<u32>(), vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_548fc7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_548fc7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_548fc7();
 }
diff --git a/test/intrinsics/gen/clamp/5f0819.wgsl b/test/intrinsics/gen/clamp/5f0819.wgsl
index 2dd85e2..c128db4 100644
--- a/test/intrinsics/gen/clamp/5f0819.wgsl
+++ b/test/intrinsics/gen/clamp/5f0819.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = clamp(vec3<i32>(), vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_5f0819();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_5f0819();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_5f0819();
 }
diff --git a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.wgsl
index 3a47502..6265d72 100644
--- a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = clamp(vec3<i32>(), vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_5f0819();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_5f0819();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_5f0819();
 }
diff --git a/test/intrinsics/gen/clamp/6c1749.wgsl b/test/intrinsics/gen/clamp/6c1749.wgsl
index 30eae79..3592939 100644
--- a/test/intrinsics/gen/clamp/6c1749.wgsl
+++ b/test/intrinsics/gen/clamp/6c1749.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = clamp(vec2<i32>(), vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_6c1749();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_6c1749();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_6c1749();
 }
diff --git a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.wgsl
index 7047f4d..58ea370 100644
--- a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = clamp(vec2<i32>(), vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_6c1749();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_6c1749();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_6c1749();
 }
diff --git a/test/intrinsics/gen/clamp/7706d7.wgsl b/test/intrinsics/gen/clamp/7706d7.wgsl
index 88badad..5e648fe 100644
--- a/test/intrinsics/gen/clamp/7706d7.wgsl
+++ b/test/intrinsics/gen/clamp/7706d7.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = clamp(vec2<u32>(), vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_7706d7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_7706d7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_7706d7();
 }
diff --git a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.wgsl
index 0d83014..b21343c 100644
--- a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = clamp(vec2<u32>(), vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_7706d7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_7706d7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_7706d7();
 }
diff --git a/test/intrinsics/gen/clamp/867397.wgsl b/test/intrinsics/gen/clamp/867397.wgsl
index fdcf1f3..96596d0c 100644
--- a/test/intrinsics/gen/clamp/867397.wgsl
+++ b/test/intrinsics/gen/clamp/867397.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = clamp(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_867397();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_867397();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_867397();
 }
diff --git a/test/intrinsics/gen/clamp/867397.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/867397.wgsl.expected.wgsl
index 38fde0a..0c74877 100644
--- a/test/intrinsics/gen/clamp/867397.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/867397.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = clamp(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_867397();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_867397();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_867397();
 }
diff --git a/test/intrinsics/gen/clamp/a2de25.wgsl b/test/intrinsics/gen/clamp/a2de25.wgsl
index e0c41c7..403c5bf 100644
--- a/test/intrinsics/gen/clamp/a2de25.wgsl
+++ b/test/intrinsics/gen/clamp/a2de25.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = clamp(1u, 1u, 1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_a2de25();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_a2de25();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_a2de25();
 }
diff --git a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.wgsl
index 70dc29b..28aa330 100644
--- a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = clamp(1u, 1u, 1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_a2de25();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_a2de25();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_a2de25();
 }
diff --git a/test/intrinsics/gen/clamp/b07c65.wgsl b/test/intrinsics/gen/clamp/b07c65.wgsl
index d285b90..1d18709 100644
--- a/test/intrinsics/gen/clamp/b07c65.wgsl
+++ b/test/intrinsics/gen/clamp/b07c65.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = clamp(1, 1, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_b07c65();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_b07c65();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_b07c65();
 }
diff --git a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.wgsl
index ddab54b..3ed77bc 100644
--- a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = clamp(1, 1, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_b07c65();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_b07c65();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_b07c65();
 }
diff --git a/test/intrinsics/gen/clamp/bd43ce.wgsl b/test/intrinsics/gen/clamp/bd43ce.wgsl
index 16a43fb..45085ef 100644
--- a/test/intrinsics/gen/clamp/bd43ce.wgsl
+++ b/test/intrinsics/gen/clamp/bd43ce.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = clamp(vec4<u32>(), vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_bd43ce();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_bd43ce();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_bd43ce();
 }
diff --git a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.wgsl b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.wgsl
index 00f69c5..51f94ba 100644
--- a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = clamp(vec4<u32>(), vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   clamp_bd43ce();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   clamp_bd43ce();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   clamp_bd43ce();
 }
diff --git a/test/intrinsics/gen/cos/16dc15.wgsl b/test/intrinsics/gen/cos/16dc15.wgsl
index 9ca499a..9f92844 100644
--- a/test/intrinsics/gen/cos/16dc15.wgsl
+++ b/test/intrinsics/gen/cos/16dc15.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = cos(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_16dc15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_16dc15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_16dc15();
 }
diff --git a/test/intrinsics/gen/cos/16dc15.wgsl.expected.wgsl b/test/intrinsics/gen/cos/16dc15.wgsl.expected.wgsl
index bd4f752..fb24d34 100644
--- a/test/intrinsics/gen/cos/16dc15.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cos/16dc15.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = cos(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_16dc15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_16dc15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_16dc15();
 }
diff --git a/test/intrinsics/gen/cos/29d66d.wgsl b/test/intrinsics/gen/cos/29d66d.wgsl
index bd16f34..d0082a4 100644
--- a/test/intrinsics/gen/cos/29d66d.wgsl
+++ b/test/intrinsics/gen/cos/29d66d.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = cos(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_29d66d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_29d66d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_29d66d();
 }
diff --git a/test/intrinsics/gen/cos/29d66d.wgsl.expected.wgsl b/test/intrinsics/gen/cos/29d66d.wgsl.expected.wgsl
index 466a4db..7bd0947 100644
--- a/test/intrinsics/gen/cos/29d66d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cos/29d66d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = cos(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_29d66d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_29d66d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_29d66d();
 }
diff --git a/test/intrinsics/gen/cos/c3b486.wgsl b/test/intrinsics/gen/cos/c3b486.wgsl
index afc2d9d..58bf973 100644
--- a/test/intrinsics/gen/cos/c3b486.wgsl
+++ b/test/intrinsics/gen/cos/c3b486.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = cos(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_c3b486();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_c3b486();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_c3b486();
 }
diff --git a/test/intrinsics/gen/cos/c3b486.wgsl.expected.wgsl b/test/intrinsics/gen/cos/c3b486.wgsl.expected.wgsl
index b6ebf94..3dfb7da 100644
--- a/test/intrinsics/gen/cos/c3b486.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cos/c3b486.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = cos(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_c3b486();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_c3b486();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_c3b486();
 }
diff --git a/test/intrinsics/gen/cos/c5c28e.wgsl b/test/intrinsics/gen/cos/c5c28e.wgsl
index 7d8990d..249a587 100644
--- a/test/intrinsics/gen/cos/c5c28e.wgsl
+++ b/test/intrinsics/gen/cos/c5c28e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = cos(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_c5c28e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_c5c28e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_c5c28e();
 }
diff --git a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.wgsl b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.wgsl
index f3a7337..e298621 100644
--- a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = cos(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cos_c5c28e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cos_c5c28e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cos_c5c28e();
 }
diff --git a/test/intrinsics/gen/cosh/377652.wgsl b/test/intrinsics/gen/cosh/377652.wgsl
index b7dc4f1..b528307 100644
--- a/test/intrinsics/gen/cosh/377652.wgsl
+++ b/test/intrinsics/gen/cosh/377652.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = cosh(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_377652();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_377652();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_377652();
 }
diff --git a/test/intrinsics/gen/cosh/377652.wgsl.expected.wgsl b/test/intrinsics/gen/cosh/377652.wgsl.expected.wgsl
index cce3776..bfcc51a 100644
--- a/test/intrinsics/gen/cosh/377652.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cosh/377652.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = cosh(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_377652();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_377652();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_377652();
 }
diff --git a/test/intrinsics/gen/cosh/c13756.wgsl b/test/intrinsics/gen/cosh/c13756.wgsl
index 635c6da..fa11315 100644
--- a/test/intrinsics/gen/cosh/c13756.wgsl
+++ b/test/intrinsics/gen/cosh/c13756.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = cosh(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_c13756();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_c13756();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_c13756();
 }
diff --git a/test/intrinsics/gen/cosh/c13756.wgsl.expected.wgsl b/test/intrinsics/gen/cosh/c13756.wgsl.expected.wgsl
index b949555..3940b8e 100644
--- a/test/intrinsics/gen/cosh/c13756.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cosh/c13756.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = cosh(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_c13756();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_c13756();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_c13756();
 }
diff --git a/test/intrinsics/gen/cosh/da92dd.wgsl b/test/intrinsics/gen/cosh/da92dd.wgsl
index fd939da..59eb8df 100644
--- a/test/intrinsics/gen/cosh/da92dd.wgsl
+++ b/test/intrinsics/gen/cosh/da92dd.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = cosh(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_da92dd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_da92dd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_da92dd();
 }
diff --git a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.wgsl b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.wgsl
index f79c746..e653a5c 100644
--- a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = cosh(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_da92dd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_da92dd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_da92dd();
 }
diff --git a/test/intrinsics/gen/cosh/e0c1de.wgsl b/test/intrinsics/gen/cosh/e0c1de.wgsl
index f6e958c..961d55f 100644
--- a/test/intrinsics/gen/cosh/e0c1de.wgsl
+++ b/test/intrinsics/gen/cosh/e0c1de.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = cosh(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_e0c1de();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_e0c1de();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_e0c1de();
 }
diff --git a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.wgsl b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.wgsl
index 1a86db7..64b0a08 100644
--- a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = cosh(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cosh_e0c1de();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cosh_e0c1de();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cosh_e0c1de();
 }
diff --git a/test/intrinsics/gen/countOneBits/0d0e46.wgsl b/test/intrinsics/gen/countOneBits/0d0e46.wgsl
index ca8afcb..dc6b49e 100644
--- a/test/intrinsics/gen/countOneBits/0d0e46.wgsl
+++ b/test/intrinsics/gen/countOneBits/0d0e46.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = countOneBits(vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_0d0e46();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_0d0e46();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_0d0e46();
 }
diff --git a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.wgsl
index f0d484a..271af00 100644
--- a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = countOneBits(vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_0d0e46();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_0d0e46();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_0d0e46();
 }
diff --git a/test/intrinsics/gen/countOneBits/0f7980.wgsl b/test/intrinsics/gen/countOneBits/0f7980.wgsl
index 569a857..cf4b27b 100644
--- a/test/intrinsics/gen/countOneBits/0f7980.wgsl
+++ b/test/intrinsics/gen/countOneBits/0f7980.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = countOneBits(vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_0f7980();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_0f7980();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_0f7980();
 }
diff --git a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.wgsl
index e2529f4..1291aa3 100644
--- a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = countOneBits(vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_0f7980();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_0f7980();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_0f7980();
 }
diff --git a/test/intrinsics/gen/countOneBits/65d2ae.wgsl b/test/intrinsics/gen/countOneBits/65d2ae.wgsl
index 625620c..ba29117 100644
--- a/test/intrinsics/gen/countOneBits/65d2ae.wgsl
+++ b/test/intrinsics/gen/countOneBits/65d2ae.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = countOneBits(vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_65d2ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_65d2ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_65d2ae();
 }
diff --git a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.wgsl
index 4afc66d..e142860 100644
--- a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = countOneBits(vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_65d2ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_65d2ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_65d2ae();
 }
diff --git a/test/intrinsics/gen/countOneBits/690cfc.wgsl b/test/intrinsics/gen/countOneBits/690cfc.wgsl
index 555889d..77ce9c4 100644
--- a/test/intrinsics/gen/countOneBits/690cfc.wgsl
+++ b/test/intrinsics/gen/countOneBits/690cfc.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = countOneBits(vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_690cfc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_690cfc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_690cfc();
 }
diff --git a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.wgsl
index 7ca3c8e..b74eb79 100644
--- a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = countOneBits(vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_690cfc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_690cfc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_690cfc();
 }
diff --git a/test/intrinsics/gen/countOneBits/94fd81.wgsl b/test/intrinsics/gen/countOneBits/94fd81.wgsl
index e39137e..ec7f081 100644
--- a/test/intrinsics/gen/countOneBits/94fd81.wgsl
+++ b/test/intrinsics/gen/countOneBits/94fd81.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = countOneBits(vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_94fd81();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_94fd81();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_94fd81();
 }
diff --git a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.wgsl
index a5711ac..e713f92 100644
--- a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = countOneBits(vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_94fd81();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_94fd81();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_94fd81();
 }
diff --git a/test/intrinsics/gen/countOneBits/ae44f9.wgsl b/test/intrinsics/gen/countOneBits/ae44f9.wgsl
index 2c31ae7..db56395 100644
--- a/test/intrinsics/gen/countOneBits/ae44f9.wgsl
+++ b/test/intrinsics/gen/countOneBits/ae44f9.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = countOneBits(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_ae44f9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_ae44f9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_ae44f9();
 }
diff --git a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.wgsl
index 0591a40..3a54993 100644
--- a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = countOneBits(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_ae44f9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_ae44f9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_ae44f9();
 }
diff --git a/test/intrinsics/gen/countOneBits/af90e2.wgsl b/test/intrinsics/gen/countOneBits/af90e2.wgsl
index 4cf6b08..f57048c 100644
--- a/test/intrinsics/gen/countOneBits/af90e2.wgsl
+++ b/test/intrinsics/gen/countOneBits/af90e2.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = countOneBits(vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_af90e2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_af90e2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_af90e2();
 }
diff --git a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.wgsl
index 5a6fdaa..c2d693a 100644
--- a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = countOneBits(vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_af90e2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_af90e2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_af90e2();
 }
diff --git a/test/intrinsics/gen/countOneBits/fd88b2.wgsl b/test/intrinsics/gen/countOneBits/fd88b2.wgsl
index 5213267..f95dcc2 100644
--- a/test/intrinsics/gen/countOneBits/fd88b2.wgsl
+++ b/test/intrinsics/gen/countOneBits/fd88b2.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = countOneBits(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_fd88b2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_fd88b2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_fd88b2();
 }
diff --git a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.wgsl b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.wgsl
index e1b4ef2..c9e437b 100644
--- a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = countOneBits(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   countOneBits_fd88b2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   countOneBits_fd88b2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   countOneBits_fd88b2();
 }
diff --git a/test/intrinsics/gen/cross/041cb0.wgsl b/test/intrinsics/gen/cross/041cb0.wgsl
index 38427b6..50f8539 100644
--- a/test/intrinsics/gen/cross/041cb0.wgsl
+++ b/test/intrinsics/gen/cross/041cb0.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = cross(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cross_041cb0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cross_041cb0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cross_041cb0();
 }
diff --git a/test/intrinsics/gen/cross/041cb0.wgsl.expected.wgsl b/test/intrinsics/gen/cross/041cb0.wgsl.expected.wgsl
index b650bd4..c3548ce 100644
--- a/test/intrinsics/gen/cross/041cb0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/cross/041cb0.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = cross(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   cross_041cb0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   cross_041cb0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   cross_041cb0();
 }
diff --git a/test/intrinsics/gen/degrees/0d170c.wgsl b/test/intrinsics/gen/degrees/0d170c.wgsl
index c1bb01e..b2ee663 100644
--- a/test/intrinsics/gen/degrees/0d170c.wgsl
+++ b/test/intrinsics/gen/degrees/0d170c.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = degrees(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_0d170c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_0d170c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_0d170c();
 }
diff --git a/test/intrinsics/gen/degrees/0d170c.wgsl.expected.wgsl b/test/intrinsics/gen/degrees/0d170c.wgsl.expected.wgsl
index fa7bd7c..6c62108 100644
--- a/test/intrinsics/gen/degrees/0d170c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/degrees/0d170c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = degrees(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_0d170c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_0d170c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_0d170c();
 }
diff --git a/test/intrinsics/gen/degrees/1ad5df.wgsl b/test/intrinsics/gen/degrees/1ad5df.wgsl
index ce4a3cb..b4c46db 100644
--- a/test/intrinsics/gen/degrees/1ad5df.wgsl
+++ b/test/intrinsics/gen/degrees/1ad5df.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = degrees(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_1ad5df();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_1ad5df();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_1ad5df();
 }
diff --git a/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.wgsl b/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.wgsl
index 09968ce..db91a65 100644
--- a/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = degrees(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_1ad5df();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_1ad5df();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_1ad5df();
 }
diff --git a/test/intrinsics/gen/degrees/2af623.wgsl b/test/intrinsics/gen/degrees/2af623.wgsl
index bf8e6cb..22772dd 100644
--- a/test/intrinsics/gen/degrees/2af623.wgsl
+++ b/test/intrinsics/gen/degrees/2af623.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = degrees(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_2af623();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_2af623();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_2af623();
 }
diff --git a/test/intrinsics/gen/degrees/2af623.wgsl.expected.wgsl b/test/intrinsics/gen/degrees/2af623.wgsl.expected.wgsl
index fc42984..d3af418 100644
--- a/test/intrinsics/gen/degrees/2af623.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/degrees/2af623.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = degrees(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_2af623();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_2af623();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_2af623();
 }
diff --git a/test/intrinsics/gen/degrees/51f705.wgsl b/test/intrinsics/gen/degrees/51f705.wgsl
index 2bbd952..71c2e93 100644
--- a/test/intrinsics/gen/degrees/51f705.wgsl
+++ b/test/intrinsics/gen/degrees/51f705.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = degrees(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_51f705();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_51f705();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_51f705();
 }
diff --git a/test/intrinsics/gen/degrees/51f705.wgsl.expected.wgsl b/test/intrinsics/gen/degrees/51f705.wgsl.expected.wgsl
index 6524f5b..5ec8b91 100644
--- a/test/intrinsics/gen/degrees/51f705.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/degrees/51f705.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = degrees(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   degrees_51f705();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   degrees_51f705();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   degrees_51f705();
 }
diff --git a/test/intrinsics/gen/determinant/2b62ba.wgsl b/test/intrinsics/gen/determinant/2b62ba.wgsl
index 2b24d16..10fd4e4 100644
--- a/test/intrinsics/gen/determinant/2b62ba.wgsl
+++ b/test/intrinsics/gen/determinant/2b62ba.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = determinant(mat3x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   determinant_2b62ba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   determinant_2b62ba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   determinant_2b62ba();
 }
diff --git a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.wgsl b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.wgsl
index a2ee672..b9c8bcd 100644
--- a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = determinant(mat3x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   determinant_2b62ba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   determinant_2b62ba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   determinant_2b62ba();
 }
diff --git a/test/intrinsics/gen/determinant/a0a87c.wgsl b/test/intrinsics/gen/determinant/a0a87c.wgsl
index 9ce49d9..b7720f5 100644
--- a/test/intrinsics/gen/determinant/a0a87c.wgsl
+++ b/test/intrinsics/gen/determinant/a0a87c.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = determinant(mat4x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   determinant_a0a87c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   determinant_a0a87c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   determinant_a0a87c();
 }
diff --git a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.wgsl b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.wgsl
index 948c1dc..1352baf 100644
--- a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = determinant(mat4x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   determinant_a0a87c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   determinant_a0a87c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   determinant_a0a87c();
 }
diff --git a/test/intrinsics/gen/determinant/e19305.wgsl b/test/intrinsics/gen/determinant/e19305.wgsl
index f930316..1406a13 100644
--- a/test/intrinsics/gen/determinant/e19305.wgsl
+++ b/test/intrinsics/gen/determinant/e19305.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = determinant(mat2x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   determinant_e19305();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   determinant_e19305();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   determinant_e19305();
 }
diff --git a/test/intrinsics/gen/determinant/e19305.wgsl.expected.wgsl b/test/intrinsics/gen/determinant/e19305.wgsl.expected.wgsl
index 418bbd7..67724c6 100644
--- a/test/intrinsics/gen/determinant/e19305.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/determinant/e19305.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = determinant(mat2x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   determinant_e19305();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   determinant_e19305();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   determinant_e19305();
 }
diff --git a/test/intrinsics/gen/distance/0657d4.wgsl b/test/intrinsics/gen/distance/0657d4.wgsl
index bb646dd..2c57d82 100644
--- a/test/intrinsics/gen/distance/0657d4.wgsl
+++ b/test/intrinsics/gen/distance/0657d4.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = distance(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_0657d4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_0657d4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_0657d4();
 }
diff --git a/test/intrinsics/gen/distance/0657d4.wgsl.expected.wgsl b/test/intrinsics/gen/distance/0657d4.wgsl.expected.wgsl
index 49a4c4f..1945bbb 100644
--- a/test/intrinsics/gen/distance/0657d4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/distance/0657d4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = distance(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_0657d4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_0657d4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_0657d4();
 }
diff --git a/test/intrinsics/gen/distance/9646ea.wgsl b/test/intrinsics/gen/distance/9646ea.wgsl
index f41be54..009877c 100644
--- a/test/intrinsics/gen/distance/9646ea.wgsl
+++ b/test/intrinsics/gen/distance/9646ea.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = distance(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_9646ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_9646ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_9646ea();
 }
diff --git a/test/intrinsics/gen/distance/9646ea.wgsl.expected.wgsl b/test/intrinsics/gen/distance/9646ea.wgsl.expected.wgsl
index 81a8e1a..0e02dff 100644
--- a/test/intrinsics/gen/distance/9646ea.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/distance/9646ea.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = distance(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_9646ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_9646ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_9646ea();
 }
diff --git a/test/intrinsics/gen/distance/aa4055.wgsl b/test/intrinsics/gen/distance/aa4055.wgsl
index ae403c7..0094477 100644
--- a/test/intrinsics/gen/distance/aa4055.wgsl
+++ b/test/intrinsics/gen/distance/aa4055.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = distance(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_aa4055();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_aa4055();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_aa4055();
 }
diff --git a/test/intrinsics/gen/distance/aa4055.wgsl.expected.wgsl b/test/intrinsics/gen/distance/aa4055.wgsl.expected.wgsl
index 5043729..307399d 100644
--- a/test/intrinsics/gen/distance/aa4055.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/distance/aa4055.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = distance(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_aa4055();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_aa4055();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_aa4055();
 }
diff --git a/test/intrinsics/gen/distance/cfed73.wgsl b/test/intrinsics/gen/distance/cfed73.wgsl
index a14dc1b..c40408d 100644
--- a/test/intrinsics/gen/distance/cfed73.wgsl
+++ b/test/intrinsics/gen/distance/cfed73.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = distance(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_cfed73();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_cfed73();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_cfed73();
 }
diff --git a/test/intrinsics/gen/distance/cfed73.wgsl.expected.wgsl b/test/intrinsics/gen/distance/cfed73.wgsl.expected.wgsl
index 86ed9e5..db5bc7d 100644
--- a/test/intrinsics/gen/distance/cfed73.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/distance/cfed73.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = distance(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   distance_cfed73();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   distance_cfed73();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   distance_cfed73();
 }
diff --git a/test/intrinsics/gen/dot/0c577b.wgsl b/test/intrinsics/gen/dot/0c577b.wgsl
index 304528f..745f4c4 100644
--- a/test/intrinsics/gen/dot/0c577b.wgsl
+++ b/test/intrinsics/gen/dot/0c577b.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = dot(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_0c577b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_0c577b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_0c577b();
 }
diff --git a/test/intrinsics/gen/dot/0c577b.wgsl.expected.wgsl b/test/intrinsics/gen/dot/0c577b.wgsl.expected.wgsl
index 8c624bb..22411b9 100644
--- a/test/intrinsics/gen/dot/0c577b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/0c577b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = dot(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_0c577b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_0c577b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_0c577b();
 }
diff --git a/test/intrinsics/gen/dot/7548a0.wgsl b/test/intrinsics/gen/dot/7548a0.wgsl
index 62d39d6..4ee9011f 100644
--- a/test/intrinsics/gen/dot/7548a0.wgsl
+++ b/test/intrinsics/gen/dot/7548a0.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = dot(vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_7548a0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_7548a0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_7548a0();
 }
diff --git a/test/intrinsics/gen/dot/7548a0.wgsl.expected.wgsl b/test/intrinsics/gen/dot/7548a0.wgsl.expected.wgsl
index 27b8265..c8b9017 100644
--- a/test/intrinsics/gen/dot/7548a0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/7548a0.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = dot(vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_7548a0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_7548a0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_7548a0();
 }
diff --git a/test/intrinsics/gen/dot/883f0e.wgsl b/test/intrinsics/gen/dot/883f0e.wgsl
index 4d73292..3a42f8c 100644
--- a/test/intrinsics/gen/dot/883f0e.wgsl
+++ b/test/intrinsics/gen/dot/883f0e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = dot(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_883f0e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_883f0e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_883f0e();
 }
diff --git a/test/intrinsics/gen/dot/883f0e.wgsl.expected.wgsl b/test/intrinsics/gen/dot/883f0e.wgsl.expected.wgsl
index c27252a..4be39c5 100644
--- a/test/intrinsics/gen/dot/883f0e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/883f0e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = dot(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_883f0e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_883f0e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_883f0e();
 }
diff --git a/test/intrinsics/gen/dot/97c7ee.wgsl b/test/intrinsics/gen/dot/97c7ee.wgsl
index d2e7e5d..c8f9459 100644
--- a/test/intrinsics/gen/dot/97c7ee.wgsl
+++ b/test/intrinsics/gen/dot/97c7ee.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = dot(vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_97c7ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_97c7ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_97c7ee();
 }
diff --git a/test/intrinsics/gen/dot/97c7ee.wgsl.expected.wgsl b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.wgsl
index 7741f7d..488052d 100644
--- a/test/intrinsics/gen/dot/97c7ee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = dot(vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_97c7ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_97c7ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_97c7ee();
 }
diff --git a/test/intrinsics/gen/dot/ba4246.wgsl b/test/intrinsics/gen/dot/ba4246.wgsl
index b64f32b..fbeb139 100644
--- a/test/intrinsics/gen/dot/ba4246.wgsl
+++ b/test/intrinsics/gen/dot/ba4246.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = dot(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_ba4246();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_ba4246();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_ba4246();
 }
diff --git a/test/intrinsics/gen/dot/ba4246.wgsl.expected.wgsl b/test/intrinsics/gen/dot/ba4246.wgsl.expected.wgsl
index 52ca2da..7ddc8d1 100644
--- a/test/intrinsics/gen/dot/ba4246.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/ba4246.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = dot(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_ba4246();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_ba4246();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_ba4246();
 }
diff --git a/test/intrinsics/gen/dot/e994c7.wgsl b/test/intrinsics/gen/dot/e994c7.wgsl
index 8ffe117..b78cbc4 100644
--- a/test/intrinsics/gen/dot/e994c7.wgsl
+++ b/test/intrinsics/gen/dot/e994c7.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = dot(vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_e994c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_e994c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_e994c7();
 }
diff --git a/test/intrinsics/gen/dot/e994c7.wgsl.expected.wgsl b/test/intrinsics/gen/dot/e994c7.wgsl.expected.wgsl
index 365e0ce..2b54959 100644
--- a/test/intrinsics/gen/dot/e994c7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/e994c7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = dot(vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_e994c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_e994c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_e994c7();
 }
diff --git a/test/intrinsics/gen/dot/ef6b1d.wgsl b/test/intrinsics/gen/dot/ef6b1d.wgsl
index b6e5eac..2e01ee2 100644
--- a/test/intrinsics/gen/dot/ef6b1d.wgsl
+++ b/test/intrinsics/gen/dot/ef6b1d.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = dot(vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_ef6b1d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_ef6b1d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_ef6b1d();
 }
diff --git a/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.wgsl b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.wgsl
index 4c35395..075cfcd 100644
--- a/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = dot(vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_ef6b1d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_ef6b1d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_ef6b1d();
 }
diff --git a/test/intrinsics/gen/dot/f1312c.wgsl b/test/intrinsics/gen/dot/f1312c.wgsl
index f08b6f2..6bb0876 100644
--- a/test/intrinsics/gen/dot/f1312c.wgsl
+++ b/test/intrinsics/gen/dot/f1312c.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = dot(vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_f1312c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_f1312c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_f1312c();
 }
diff --git a/test/intrinsics/gen/dot/f1312c.wgsl.expected.wgsl b/test/intrinsics/gen/dot/f1312c.wgsl.expected.wgsl
index 1e9ffe1..7440cf9 100644
--- a/test/intrinsics/gen/dot/f1312c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/f1312c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = dot(vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_f1312c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_f1312c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_f1312c();
 }
diff --git a/test/intrinsics/gen/dot/fc5f7c.wgsl b/test/intrinsics/gen/dot/fc5f7c.wgsl
index 7b0ae29..bbadae8 100644
--- a/test/intrinsics/gen/dot/fc5f7c.wgsl
+++ b/test/intrinsics/gen/dot/fc5f7c.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = dot(vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_fc5f7c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_fc5f7c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_fc5f7c();
 }
diff --git a/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.wgsl b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.wgsl
index 4aaabfc..6d30122 100644
--- a/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = dot(vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   dot_fc5f7c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dot_fc5f7c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   dot_fc5f7c();
 }
diff --git a/test/intrinsics/gen/dpdx/0763f7.wgsl b/test/intrinsics/gen/dpdx/0763f7.wgsl
index fc6a536..cbfc41a 100644
--- a/test/intrinsics/gen/dpdx/0763f7.wgsl
+++ b/test/intrinsics/gen/dpdx/0763f7.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = dpdx(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_0763f7();
 }
diff --git a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.wgsl b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.wgsl
index be5f4e0..15235d6 100644
--- a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = dpdx(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_0763f7();
 }
diff --git a/test/intrinsics/gen/dpdx/99edb1.wgsl b/test/intrinsics/gen/dpdx/99edb1.wgsl
index 1ca0b06..84f5126 100644
--- a/test/intrinsics/gen/dpdx/99edb1.wgsl
+++ b/test/intrinsics/gen/dpdx/99edb1.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = dpdx(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_99edb1();
 }
diff --git a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.wgsl b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.wgsl
index aafee00..7405f0f 100644
--- a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = dpdx(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_99edb1();
 }
diff --git a/test/intrinsics/gen/dpdx/c487fa.wgsl b/test/intrinsics/gen/dpdx/c487fa.wgsl
index ed27ff0..7b477fb 100644
--- a/test/intrinsics/gen/dpdx/c487fa.wgsl
+++ b/test/intrinsics/gen/dpdx/c487fa.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = dpdx(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_c487fa();
 }
diff --git a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.wgsl b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.wgsl
index 350f0c2..f2ebe8e 100644
--- a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = dpdx(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_c487fa();
 }
diff --git a/test/intrinsics/gen/dpdx/e263de.wgsl b/test/intrinsics/gen/dpdx/e263de.wgsl
index 58fdd1f..60498a7 100644
--- a/test/intrinsics/gen/dpdx/e263de.wgsl
+++ b/test/intrinsics/gen/dpdx/e263de.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = dpdx(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_e263de();
 }
diff --git a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.wgsl b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.wgsl
index 03939a6..ac653d8 100644
--- a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = dpdx(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdx_e263de();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/029152.wgsl b/test/intrinsics/gen/dpdxCoarse/029152.wgsl
index e6d8ea6..1a7cc1d 100644
--- a/test/intrinsics/gen/dpdxCoarse/029152.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/029152.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = dpdxCoarse(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_029152();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.wgsl
index 9f2d250..38fe60c 100644
--- a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = dpdxCoarse(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_029152();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl
index 3e5bfe5..5ccf411 100644
--- a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = dpdxCoarse(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_9581cf();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.wgsl
index a341150..51ac0a5 100644
--- a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = dpdxCoarse(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_9581cf();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl
index a2b5d79..8777156 100644
--- a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = dpdxCoarse(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_c28641();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.wgsl
index 17c714b..51fa7dc 100644
--- a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = dpdxCoarse(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_c28641();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl
index d3843af..40b501c 100644
--- a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = dpdxCoarse(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_f64d7b();
 }
diff --git a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.wgsl
index 6182abe..f5a9d29 100644
--- a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = dpdxCoarse(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxCoarse_f64d7b();
 }
diff --git a/test/intrinsics/gen/dpdxFine/8c5069.wgsl b/test/intrinsics/gen/dpdxFine/8c5069.wgsl
index 58bf252..b1db7e3 100644
--- a/test/intrinsics/gen/dpdxFine/8c5069.wgsl
+++ b/test/intrinsics/gen/dpdxFine/8c5069.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = dpdxFine(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_8c5069();
 }
diff --git a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.wgsl
index a83e763..6de1a1c 100644
--- a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = dpdxFine(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_8c5069();
 }
diff --git a/test/intrinsics/gen/dpdxFine/9631de.wgsl b/test/intrinsics/gen/dpdxFine/9631de.wgsl
index 2ca05c3..f29dffb 100644
--- a/test/intrinsics/gen/dpdxFine/9631de.wgsl
+++ b/test/intrinsics/gen/dpdxFine/9631de.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = dpdxFine(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_9631de();
 }
diff --git a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.wgsl
index 002e44e..a56d3c4 100644
--- a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = dpdxFine(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_9631de();
 }
diff --git a/test/intrinsics/gen/dpdxFine/f401a2.wgsl b/test/intrinsics/gen/dpdxFine/f401a2.wgsl
index a723328..405291f 100644
--- a/test/intrinsics/gen/dpdxFine/f401a2.wgsl
+++ b/test/intrinsics/gen/dpdxFine/f401a2.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = dpdxFine(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_f401a2();
 }
diff --git a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.wgsl
index 2790d8d..3f5c836 100644
--- a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = dpdxFine(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_f401a2();
 }
diff --git a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl
index 97ceac3..8a3b66d 100644
--- a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl
+++ b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = dpdxFine(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_f92fb6();
 }
diff --git a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.wgsl b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.wgsl
index a40c3fb..5189c7f 100644
--- a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = dpdxFine(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdxFine_f92fb6();
 }
diff --git a/test/intrinsics/gen/dpdy/699a05.wgsl b/test/intrinsics/gen/dpdy/699a05.wgsl
index 3ae6234..dc14668 100644
--- a/test/intrinsics/gen/dpdy/699a05.wgsl
+++ b/test/intrinsics/gen/dpdy/699a05.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = dpdy(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_699a05();
 }
diff --git a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.wgsl b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.wgsl
index 5be383d..9aa244c 100644
--- a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = dpdy(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_699a05();
 }
diff --git a/test/intrinsics/gen/dpdy/7f8d84.wgsl b/test/intrinsics/gen/dpdy/7f8d84.wgsl
index d712959..c468777 100644
--- a/test/intrinsics/gen/dpdy/7f8d84.wgsl
+++ b/test/intrinsics/gen/dpdy/7f8d84.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = dpdy(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_7f8d84();
 }
diff --git a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.wgsl b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.wgsl
index 9d96009..732458e 100644
--- a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = dpdy(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_7f8d84();
 }
diff --git a/test/intrinsics/gen/dpdy/a8b56e.wgsl b/test/intrinsics/gen/dpdy/a8b56e.wgsl
index 011d813..e79bff9 100644
--- a/test/intrinsics/gen/dpdy/a8b56e.wgsl
+++ b/test/intrinsics/gen/dpdy/a8b56e.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = dpdy(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_a8b56e();
 }
diff --git a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.wgsl b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.wgsl
index bfe028f..3493de8 100644
--- a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = dpdy(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_a8b56e();
 }
diff --git a/test/intrinsics/gen/dpdy/feb40f.wgsl b/test/intrinsics/gen/dpdy/feb40f.wgsl
index 31ce8bc..f3afdc2 100644
--- a/test/intrinsics/gen/dpdy/feb40f.wgsl
+++ b/test/intrinsics/gen/dpdy/feb40f.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = dpdy(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_feb40f();
 }
diff --git a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.wgsl b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.wgsl
index f75381c..bdcb51d 100644
--- a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = dpdy(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdy_feb40f();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl
index 073440f..15007a3 100644
--- a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = dpdyCoarse(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_3e1ab4();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.wgsl
index d109629..347ad73 100644
--- a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = dpdyCoarse(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_3e1ab4();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl
index eeed8c9..b397d4e 100644
--- a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = dpdyCoarse(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_445d24();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.wgsl
index c5659f6..db347c4 100644
--- a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = dpdyCoarse(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_445d24();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl
index a2414d7..7fc7907 100644
--- a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = dpdyCoarse(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_870a7e();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.wgsl
index 1bf505ff..b3d7586 100644
--- a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = dpdyCoarse(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_870a7e();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl
index 36cfd7b..b1f32ef 100644
--- a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = dpdyCoarse(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_ae1873();
 }
diff --git a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.wgsl
index e625403..c116a9e1 100644
--- a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = dpdyCoarse(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyCoarse_ae1873();
 }
diff --git a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl
index 352890b..3a28460 100644
--- a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl
+++ b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = dpdyFine(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_1fb7ab();
 }
diff --git a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.wgsl
index 852459c..96fd518 100644
--- a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = dpdyFine(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_1fb7ab();
 }
diff --git a/test/intrinsics/gen/dpdyFine/6eb673.wgsl b/test/intrinsics/gen/dpdyFine/6eb673.wgsl
index d2bb96c..9469533 100644
--- a/test/intrinsics/gen/dpdyFine/6eb673.wgsl
+++ b/test/intrinsics/gen/dpdyFine/6eb673.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = dpdyFine(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_6eb673();
 }
diff --git a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.wgsl
index 60caecd..8fbc820 100644
--- a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = dpdyFine(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_6eb673();
 }
diff --git a/test/intrinsics/gen/dpdyFine/d0a648.wgsl b/test/intrinsics/gen/dpdyFine/d0a648.wgsl
index 57e48fe..436f5a1 100644
--- a/test/intrinsics/gen/dpdyFine/d0a648.wgsl
+++ b/test/intrinsics/gen/dpdyFine/d0a648.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = dpdyFine(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_d0a648();
 }
diff --git a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.wgsl
index 160b27b..5d4fc7d 100644
--- a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = dpdyFine(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_d0a648();
 }
diff --git a/test/intrinsics/gen/dpdyFine/df33aa.wgsl b/test/intrinsics/gen/dpdyFine/df33aa.wgsl
index 4d84817e..fdfc9c8 100644
--- a/test/intrinsics/gen/dpdyFine/df33aa.wgsl
+++ b/test/intrinsics/gen/dpdyFine/df33aa.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = dpdyFine(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_df33aa();
 }
diff --git a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.wgsl b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.wgsl
index b541ecf..876948a 100644
--- a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = dpdyFine(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   dpdyFine_df33aa();
 }
diff --git a/test/intrinsics/gen/exp/0f70eb.wgsl b/test/intrinsics/gen/exp/0f70eb.wgsl
index a641b6c..e65faa4 100644
--- a/test/intrinsics/gen/exp/0f70eb.wgsl
+++ b/test/intrinsics/gen/exp/0f70eb.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = exp(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_0f70eb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_0f70eb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_0f70eb();
 }
diff --git a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.wgsl b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.wgsl
index 56d1828..bdcd32b 100644
--- a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = exp(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_0f70eb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_0f70eb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_0f70eb();
 }
diff --git a/test/intrinsics/gen/exp/1951e7.wgsl b/test/intrinsics/gen/exp/1951e7.wgsl
index e8a0ecc..6e006f3 100644
--- a/test/intrinsics/gen/exp/1951e7.wgsl
+++ b/test/intrinsics/gen/exp/1951e7.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = exp(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_1951e7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_1951e7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_1951e7();
 }
diff --git a/test/intrinsics/gen/exp/1951e7.wgsl.expected.wgsl b/test/intrinsics/gen/exp/1951e7.wgsl.expected.wgsl
index 81e9694..f3dd502 100644
--- a/test/intrinsics/gen/exp/1951e7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp/1951e7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = exp(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_1951e7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_1951e7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_1951e7();
 }
diff --git a/test/intrinsics/gen/exp/771fd2.wgsl b/test/intrinsics/gen/exp/771fd2.wgsl
index e44b635..a1cb3cd 100644
--- a/test/intrinsics/gen/exp/771fd2.wgsl
+++ b/test/intrinsics/gen/exp/771fd2.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = exp(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_771fd2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_771fd2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_771fd2();
 }
diff --git a/test/intrinsics/gen/exp/771fd2.wgsl.expected.wgsl b/test/intrinsics/gen/exp/771fd2.wgsl.expected.wgsl
index 4fdeb252..31bfd18 100644
--- a/test/intrinsics/gen/exp/771fd2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp/771fd2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = exp(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_771fd2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_771fd2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_771fd2();
 }
diff --git a/test/intrinsics/gen/exp/d98450.wgsl b/test/intrinsics/gen/exp/d98450.wgsl
index c74af04..2404a17 100644
--- a/test/intrinsics/gen/exp/d98450.wgsl
+++ b/test/intrinsics/gen/exp/d98450.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = exp(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_d98450();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_d98450();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_d98450();
 }
diff --git a/test/intrinsics/gen/exp/d98450.wgsl.expected.wgsl b/test/intrinsics/gen/exp/d98450.wgsl.expected.wgsl
index 06ffea3..168c3c2 100644
--- a/test/intrinsics/gen/exp/d98450.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp/d98450.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = exp(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp_d98450();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp_d98450();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp_d98450();
 }
diff --git a/test/intrinsics/gen/exp2/1f8680.wgsl b/test/intrinsics/gen/exp2/1f8680.wgsl
index 40852d4..0fdaeba 100644
--- a/test/intrinsics/gen/exp2/1f8680.wgsl
+++ b/test/intrinsics/gen/exp2/1f8680.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = exp2(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_1f8680();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_1f8680();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_1f8680();
 }
diff --git a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.wgsl b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.wgsl
index be2ee95..a4cba82 100644
--- a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = exp2(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_1f8680();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_1f8680();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_1f8680();
 }
diff --git a/test/intrinsics/gen/exp2/a9d0a7.wgsl b/test/intrinsics/gen/exp2/a9d0a7.wgsl
index ac64102..46e47f7 100644
--- a/test/intrinsics/gen/exp2/a9d0a7.wgsl
+++ b/test/intrinsics/gen/exp2/a9d0a7.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = exp2(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_a9d0a7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_a9d0a7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_a9d0a7();
 }
diff --git a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.wgsl b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.wgsl
index ebdaf6d..6a9160b 100644
--- a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = exp2(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_a9d0a7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_a9d0a7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_a9d0a7();
 }
diff --git a/test/intrinsics/gen/exp2/d6777c.wgsl b/test/intrinsics/gen/exp2/d6777c.wgsl
index 7206fe6..42933c0 100644
--- a/test/intrinsics/gen/exp2/d6777c.wgsl
+++ b/test/intrinsics/gen/exp2/d6777c.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = exp2(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_d6777c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_d6777c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_d6777c();
 }
diff --git a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.wgsl b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.wgsl
index 3a6b02b..7c84e15 100644
--- a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = exp2(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_d6777c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_d6777c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_d6777c();
 }
diff --git a/test/intrinsics/gen/exp2/dea523.wgsl b/test/intrinsics/gen/exp2/dea523.wgsl
index 1ca1f3d..26e836a 100644
--- a/test/intrinsics/gen/exp2/dea523.wgsl
+++ b/test/intrinsics/gen/exp2/dea523.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = exp2(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_dea523();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_dea523();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_dea523();
 }
diff --git a/test/intrinsics/gen/exp2/dea523.wgsl.expected.wgsl b/test/intrinsics/gen/exp2/dea523.wgsl.expected.wgsl
index 548eaea..92ea06d 100644
--- a/test/intrinsics/gen/exp2/dea523.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/exp2/dea523.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = exp2(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   exp2_dea523();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   exp2_dea523();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   exp2_dea523();
 }
diff --git a/test/intrinsics/gen/faceForward/5afbd5.wgsl b/test/intrinsics/gen/faceForward/5afbd5.wgsl
index 70d32a9..3e036f3 100644
--- a/test/intrinsics/gen/faceForward/5afbd5.wgsl
+++ b/test/intrinsics/gen/faceForward/5afbd5.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = faceForward(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   faceForward_5afbd5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   faceForward_5afbd5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   faceForward_5afbd5();
 }
diff --git a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.wgsl b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.wgsl
index 60f43f7..65e8800 100644
--- a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = faceForward(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   faceForward_5afbd5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   faceForward_5afbd5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   faceForward_5afbd5();
 }
diff --git a/test/intrinsics/gen/faceForward/b316e5.wgsl b/test/intrinsics/gen/faceForward/b316e5.wgsl
index bccaf38..2e31ca6 100644
--- a/test/intrinsics/gen/faceForward/b316e5.wgsl
+++ b/test/intrinsics/gen/faceForward/b316e5.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = faceForward(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   faceForward_b316e5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   faceForward_b316e5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   faceForward_b316e5();
 }
diff --git a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.wgsl b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.wgsl
index accacf2..e3cc002 100644
--- a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = faceForward(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   faceForward_b316e5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   faceForward_b316e5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   faceForward_b316e5();
 }
diff --git a/test/intrinsics/gen/faceForward/e6908b.wgsl b/test/intrinsics/gen/faceForward/e6908b.wgsl
index 626e2ab..4c9a2be 100644
--- a/test/intrinsics/gen/faceForward/e6908b.wgsl
+++ b/test/intrinsics/gen/faceForward/e6908b.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = faceForward(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   faceForward_e6908b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   faceForward_e6908b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   faceForward_e6908b();
 }
diff --git a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.wgsl b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.wgsl
index c5a1a40..96c2c87 100644
--- a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = faceForward(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   faceForward_e6908b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   faceForward_e6908b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   faceForward_e6908b();
 }
diff --git a/test/intrinsics/gen/floor/3bccc4.wgsl b/test/intrinsics/gen/floor/3bccc4.wgsl
index 21c16ee..3d27b57 100644
--- a/test/intrinsics/gen/floor/3bccc4.wgsl
+++ b/test/intrinsics/gen/floor/3bccc4.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = floor(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_3bccc4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_3bccc4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_3bccc4();
 }
diff --git a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.wgsl b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.wgsl
index a9a17da..878e104 100644
--- a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = floor(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_3bccc4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_3bccc4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_3bccc4();
 }
diff --git a/test/intrinsics/gen/floor/5fc9ac.wgsl b/test/intrinsics/gen/floor/5fc9ac.wgsl
index 8b9bb2c..49afc11 100644
--- a/test/intrinsics/gen/floor/5fc9ac.wgsl
+++ b/test/intrinsics/gen/floor/5fc9ac.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = floor(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_5fc9ac();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_5fc9ac();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_5fc9ac();
 }
diff --git a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.wgsl b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.wgsl
index 5ab196a..1b6fadd 100644
--- a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = floor(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_5fc9ac();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_5fc9ac();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_5fc9ac();
 }
diff --git a/test/intrinsics/gen/floor/60d7ea.wgsl b/test/intrinsics/gen/floor/60d7ea.wgsl
index 90c0a3b..6e4c944 100644
--- a/test/intrinsics/gen/floor/60d7ea.wgsl
+++ b/test/intrinsics/gen/floor/60d7ea.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = floor(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_60d7ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_60d7ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_60d7ea();
 }
diff --git a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.wgsl b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.wgsl
index 62b956f..bfc5a83 100644
--- a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = floor(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_60d7ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_60d7ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_60d7ea();
 }
diff --git a/test/intrinsics/gen/floor/66f154.wgsl b/test/intrinsics/gen/floor/66f154.wgsl
index afec159..8020bf6 100644
--- a/test/intrinsics/gen/floor/66f154.wgsl
+++ b/test/intrinsics/gen/floor/66f154.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = floor(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_66f154();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_66f154();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_66f154();
 }
diff --git a/test/intrinsics/gen/floor/66f154.wgsl.expected.wgsl b/test/intrinsics/gen/floor/66f154.wgsl.expected.wgsl
index 45144a4..11de386 100644
--- a/test/intrinsics/gen/floor/66f154.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/floor/66f154.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = floor(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   floor_66f154();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   floor_66f154();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   floor_66f154();
 }
diff --git a/test/intrinsics/gen/fma/26a7a9.wgsl b/test/intrinsics/gen/fma/26a7a9.wgsl
index 314493b..bb6f1c0 100644
--- a/test/intrinsics/gen/fma/26a7a9.wgsl
+++ b/test/intrinsics/gen/fma/26a7a9.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = fma(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_26a7a9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_26a7a9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_26a7a9();
 }
diff --git a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.wgsl b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.wgsl
index fb9bdef..f1edf4e 100644
--- a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = fma(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_26a7a9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_26a7a9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_26a7a9();
 }
diff --git a/test/intrinsics/gen/fma/6a3283.wgsl b/test/intrinsics/gen/fma/6a3283.wgsl
index e722ec9..2074905 100644
--- a/test/intrinsics/gen/fma/6a3283.wgsl
+++ b/test/intrinsics/gen/fma/6a3283.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = fma(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_6a3283();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_6a3283();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_6a3283();
 }
diff --git a/test/intrinsics/gen/fma/6a3283.wgsl.expected.wgsl b/test/intrinsics/gen/fma/6a3283.wgsl.expected.wgsl
index 5040b3b..267c2b1 100644
--- a/test/intrinsics/gen/fma/6a3283.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fma/6a3283.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = fma(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_6a3283();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_6a3283();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_6a3283();
 }
diff --git a/test/intrinsics/gen/fma/c10ba3.wgsl b/test/intrinsics/gen/fma/c10ba3.wgsl
index 39b6af3..9bd4277 100644
--- a/test/intrinsics/gen/fma/c10ba3.wgsl
+++ b/test/intrinsics/gen/fma/c10ba3.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = fma(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_c10ba3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_c10ba3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_c10ba3();
 }
diff --git a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.wgsl b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.wgsl
index f43de8f..baec69d 100644
--- a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = fma(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_c10ba3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_c10ba3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_c10ba3();
 }
diff --git a/test/intrinsics/gen/fma/e17c5c.wgsl b/test/intrinsics/gen/fma/e17c5c.wgsl
index 6fa8a4f..a9adbb0 100644
--- a/test/intrinsics/gen/fma/e17c5c.wgsl
+++ b/test/intrinsics/gen/fma/e17c5c.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = fma(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_e17c5c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_e17c5c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_e17c5c();
 }
diff --git a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.wgsl b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.wgsl
index 35874f4..adc6a88 100644
--- a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = fma(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fma_e17c5c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fma_e17c5c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fma_e17c5c();
 }
diff --git a/test/intrinsics/gen/fract/8bc1e9.wgsl b/test/intrinsics/gen/fract/8bc1e9.wgsl
index 79c9611..d064af2 100644
--- a/test/intrinsics/gen/fract/8bc1e9.wgsl
+++ b/test/intrinsics/gen/fract/8bc1e9.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = fract(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_8bc1e9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_8bc1e9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_8bc1e9();
 }
diff --git a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.wgsl b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.wgsl
index 77b2630..6476408 100644
--- a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = fract(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_8bc1e9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_8bc1e9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_8bc1e9();
 }
diff --git a/test/intrinsics/gen/fract/943cb1.wgsl b/test/intrinsics/gen/fract/943cb1.wgsl
index 9c9552a..50d0038 100644
--- a/test/intrinsics/gen/fract/943cb1.wgsl
+++ b/test/intrinsics/gen/fract/943cb1.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = fract(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_943cb1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_943cb1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_943cb1();
 }
diff --git a/test/intrinsics/gen/fract/943cb1.wgsl.expected.wgsl b/test/intrinsics/gen/fract/943cb1.wgsl.expected.wgsl
index 26a6f25..977e3f9 100644
--- a/test/intrinsics/gen/fract/943cb1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fract/943cb1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = fract(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_943cb1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_943cb1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_943cb1();
 }
diff --git a/test/intrinsics/gen/fract/a49758.wgsl b/test/intrinsics/gen/fract/a49758.wgsl
index 9617954..567a336 100644
--- a/test/intrinsics/gen/fract/a49758.wgsl
+++ b/test/intrinsics/gen/fract/a49758.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = fract(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_a49758();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_a49758();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_a49758();
 }
diff --git a/test/intrinsics/gen/fract/a49758.wgsl.expected.wgsl b/test/intrinsics/gen/fract/a49758.wgsl.expected.wgsl
index 8adc33c..7ab47df 100644
--- a/test/intrinsics/gen/fract/a49758.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fract/a49758.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = fract(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_a49758();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_a49758();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_a49758();
 }
diff --git a/test/intrinsics/gen/fract/fa5c71.wgsl b/test/intrinsics/gen/fract/fa5c71.wgsl
index b6eaefe..35a24e1 100644
--- a/test/intrinsics/gen/fract/fa5c71.wgsl
+++ b/test/intrinsics/gen/fract/fa5c71.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = fract(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_fa5c71();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_fa5c71();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_fa5c71();
 }
diff --git a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.wgsl b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.wgsl
index 292a7bf..3599c79 100644
--- a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = fract(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   fract_fa5c71();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fract_fa5c71();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   fract_fa5c71();
 }
diff --git a/test/intrinsics/gen/frexp/368997.wgsl b/test/intrinsics/gen/frexp/368997.wgsl
index af00ee5..f7d9a71 100644
--- a/test/intrinsics/gen/frexp/368997.wgsl
+++ b/test/intrinsics/gen/frexp/368997.wgsl
@@ -28,18 +28,18 @@
   var res = frexp(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_368997();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_368997();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_368997();
 }
diff --git a/test/intrinsics/gen/frexp/368997.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/368997.wgsl.expected.wgsl
index d0f86b4..914f1d5 100644
--- a/test/intrinsics/gen/frexp/368997.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/368997.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = frexp(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_368997();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_368997();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_368997();
 }
diff --git a/test/intrinsics/gen/frexp/3c4f48.wgsl b/test/intrinsics/gen/frexp/3c4f48.wgsl
index ce58325..2dd0849 100644
--- a/test/intrinsics/gen/frexp/3c4f48.wgsl
+++ b/test/intrinsics/gen/frexp/3c4f48.wgsl
@@ -28,18 +28,18 @@
   var res = frexp(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_3c4f48();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_3c4f48();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_3c4f48();
 }
diff --git a/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.wgsl
index 07b50b6..2129fb6 100644
--- a/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = frexp(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_3c4f48();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_3c4f48();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_3c4f48();
 }
diff --git a/test/intrinsics/gen/frexp/4bdfc7.wgsl b/test/intrinsics/gen/frexp/4bdfc7.wgsl
index 4b48ab8..eff4518 100644
--- a/test/intrinsics/gen/frexp/4bdfc7.wgsl
+++ b/test/intrinsics/gen/frexp/4bdfc7.wgsl
@@ -28,18 +28,18 @@
   var res = frexp(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_4bdfc7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_4bdfc7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_4bdfc7();
 }
diff --git a/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.wgsl
index 6473fd5..8dfe70c 100644
--- a/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = frexp(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_4bdfc7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_4bdfc7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_4bdfc7();
 }
diff --git a/test/intrinsics/gen/frexp/eabd40.wgsl b/test/intrinsics/gen/frexp/eabd40.wgsl
index a2f580f..3f2f00d 100644
--- a/test/intrinsics/gen/frexp/eabd40.wgsl
+++ b/test/intrinsics/gen/frexp/eabd40.wgsl
@@ -28,18 +28,18 @@
   var res = frexp(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_eabd40();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_eabd40();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_eabd40();
 }
diff --git a/test/intrinsics/gen/frexp/eabd40.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/eabd40.wgsl.expected.wgsl
index 8dd5d1c..3bcd2b6 100644
--- a/test/intrinsics/gen/frexp/eabd40.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/frexp/eabd40.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = frexp(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   frexp_eabd40();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   frexp_eabd40();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   frexp_eabd40();
 }
diff --git a/test/intrinsics/gen/fwidth/5d1b39.wgsl b/test/intrinsics/gen/fwidth/5d1b39.wgsl
index f323aca..8400934 100644
--- a/test/intrinsics/gen/fwidth/5d1b39.wgsl
+++ b/test/intrinsics/gen/fwidth/5d1b39.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = fwidth(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_5d1b39();
 }
diff --git a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.wgsl b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.wgsl
index b2f0692..f3c53fa 100644
--- a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = fwidth(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_5d1b39();
 }
diff --git a/test/intrinsics/gen/fwidth/b83ebb.wgsl b/test/intrinsics/gen/fwidth/b83ebb.wgsl
index e528240..36592fd 100644
--- a/test/intrinsics/gen/fwidth/b83ebb.wgsl
+++ b/test/intrinsics/gen/fwidth/b83ebb.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = fwidth(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_b83ebb();
 }
diff --git a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.wgsl b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.wgsl
index a858363..aa9e984 100644
--- a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = fwidth(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_b83ebb();
 }
diff --git a/test/intrinsics/gen/fwidth/d2ab9a.wgsl b/test/intrinsics/gen/fwidth/d2ab9a.wgsl
index 615e251..49c41ea6 100644
--- a/test/intrinsics/gen/fwidth/d2ab9a.wgsl
+++ b/test/intrinsics/gen/fwidth/d2ab9a.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = fwidth(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_d2ab9a();
 }
diff --git a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.wgsl b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.wgsl
index ee3c551..d5ba206 100644
--- a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = fwidth(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_d2ab9a();
 }
diff --git a/test/intrinsics/gen/fwidth/df38ef.wgsl b/test/intrinsics/gen/fwidth/df38ef.wgsl
index 5cd698d..9388812 100644
--- a/test/intrinsics/gen/fwidth/df38ef.wgsl
+++ b/test/intrinsics/gen/fwidth/df38ef.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = fwidth(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_df38ef();
 }
diff --git a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.wgsl b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.wgsl
index a0fcaec..b98137e 100644
--- a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = fwidth(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidth_df38ef();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl
index 35df109..a7c4cd3 100644
--- a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = fwidthCoarse(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_159c8a();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.wgsl
index f4c9169..1e592ef 100644
--- a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = fwidthCoarse(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_159c8a();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl
index c1c41e1..044c582 100644
--- a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = fwidthCoarse(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_1e59d9();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.wgsl
index 838c5e0..1352bf6 100644
--- a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = fwidthCoarse(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_1e59d9();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl
index 1d7272e..da66152 100644
--- a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = fwidthCoarse(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_4e4fc4();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.wgsl
index 01eae21..3fea38a 100644
--- a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = fwidthCoarse(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_4e4fc4();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl
index b27d20d..bfd46bb 100644
--- a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = fwidthCoarse(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_e653f7();
 }
diff --git a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.wgsl
index 2bed1c7..9e5a1da 100644
--- a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = fwidthCoarse(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthCoarse_e653f7();
 }
diff --git a/test/intrinsics/gen/fwidthFine/523fdc.wgsl b/test/intrinsics/gen/fwidthFine/523fdc.wgsl
index a882b5c..d02b674 100644
--- a/test/intrinsics/gen/fwidthFine/523fdc.wgsl
+++ b/test/intrinsics/gen/fwidthFine/523fdc.wgsl
@@ -28,7 +28,7 @@
   var res: vec3<f32> = fwidthFine(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_523fdc();
 }
diff --git a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.wgsl
index d0fff42..41cb66c 100644
--- a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec3<f32> = fwidthFine(vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_523fdc();
 }
diff --git a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl
index f3fce3b..cd641a0 100644
--- a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl
+++ b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl
@@ -28,7 +28,7 @@
   var res: vec4<f32> = fwidthFine(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_68f4ef();
 }
diff --git a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.wgsl
index 19389eb..97f1033 100644
--- a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec4<f32> = fwidthFine(vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_68f4ef();
 }
diff --git a/test/intrinsics/gen/fwidthFine/f1742d.wgsl b/test/intrinsics/gen/fwidthFine/f1742d.wgsl
index 8d6c71c..c78f9b0 100644
--- a/test/intrinsics/gen/fwidthFine/f1742d.wgsl
+++ b/test/intrinsics/gen/fwidthFine/f1742d.wgsl
@@ -28,7 +28,7 @@
   var res: f32 = fwidthFine(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_f1742d();
 }
diff --git a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.wgsl
index 6985860..4a764a5 100644
--- a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : f32 = fwidthFine(1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_f1742d();
 }
diff --git a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl
index ba6726e..4176ec2 100644
--- a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl
+++ b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl
@@ -28,7 +28,7 @@
   var res: vec2<f32> = fwidthFine(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_ff6aa0();
 }
diff --git a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.wgsl b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.wgsl
index c9b1e24..7ca7637 100644
--- a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   var res : vec2<f32> = fwidthFine(vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fwidthFine_ff6aa0();
 }
diff --git a/test/intrinsics/gen/ignore/2a6ac2.wgsl b/test/intrinsics/gen/ignore/2a6ac2.wgsl
index a7bb0c6..b754307 100644
--- a/test/intrinsics/gen/ignore/2a6ac2.wgsl
+++ b/test/intrinsics/gen/ignore/2a6ac2.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0: texture_depth_multisampled_2d;
 
 // fn ignore(texture_depth_multisampled_2d)
 fn ignore_2a6ac2() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_2a6ac2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_2a6ac2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_2a6ac2();
 }
diff --git a/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.wgsl
index c035b52..c6a2145 100644
--- a/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 fn ignore_2a6ac2() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_2a6ac2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_2a6ac2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_2a6ac2();
 }
diff --git a/test/intrinsics/gen/ignore/5016e5.wgsl b/test/intrinsics/gen/ignore/5016e5.wgsl
index 8628618..0e49fb6 100644
--- a/test/intrinsics/gen/ignore/5016e5.wgsl
+++ b/test/intrinsics/gen/ignore/5016e5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: sampler;
+@group(1) @binding(0) var arg_0: sampler;
 
 // fn ignore(sampler)
 fn ignore_5016e5() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_5016e5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_5016e5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_5016e5();
 }
diff --git a/test/intrinsics/gen/ignore/5016e5.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/5016e5.wgsl.expected.wgsl
index e422693..2d1c7b6 100644
--- a/test/intrinsics/gen/ignore/5016e5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/5016e5.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : sampler;
+@group(1) @binding(0) var arg_0 : sampler;
 
 fn ignore_5016e5() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_5016e5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_5016e5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_5016e5();
 }
diff --git a/test/intrinsics/gen/ignore/509355.wgsl b/test/intrinsics/gen/ignore/509355.wgsl
index 161002c..30557aa 100644
--- a/test/intrinsics/gen/ignore/509355.wgsl
+++ b/test/intrinsics/gen/ignore/509355.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
 
 // fn ignore(texture_depth_cube)
 fn ignore_509355() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_509355();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_509355();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_509355();
 }
diff --git a/test/intrinsics/gen/ignore/509355.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/509355.wgsl.expected.wgsl
index edfc4af..39d4815 100644
--- a/test/intrinsics/gen/ignore/509355.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/509355.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
 fn ignore_509355() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_509355();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_509355();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_509355();
 }
diff --git a/test/intrinsics/gen/ignore/51aeb7.wgsl b/test/intrinsics/gen/ignore/51aeb7.wgsl
index becd6dd..1f986d2 100644
--- a/test/intrinsics/gen/ignore/51aeb7.wgsl
+++ b/test/intrinsics/gen/ignore/51aeb7.wgsl
@@ -28,18 +28,18 @@
   ignore(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_51aeb7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_51aeb7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_51aeb7();
 }
diff --git a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.wgsl
index 8d35e83..9ecccc7 100644
--- a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   ignore(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_51aeb7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_51aeb7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_51aeb7();
 }
diff --git a/test/intrinsics/gen/ignore/5c9edf.wgsl b/test/intrinsics/gen/ignore/5c9edf.wgsl
index 74e0717..e53a664 100644
--- a/test/intrinsics/gen/ignore/5c9edf.wgsl
+++ b/test/intrinsics/gen/ignore/5c9edf.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_external;
+@group(1) @binding(0) var arg_0: texture_external;
 
 // fn ignore(texture_external)
 fn ignore_5c9edf() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_5c9edf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_5c9edf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_5c9edf();
 }
diff --git a/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.wgsl
index d078cac..8249e9a 100644
--- a/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : texture_external;
+@group(1) @binding(0) var arg_0 : texture_external;
 
 fn ignore_5c9edf() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_5c9edf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_5c9edf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_5c9edf();
 }
diff --git a/test/intrinsics/gen/ignore/6698df.wgsl b/test/intrinsics/gen/ignore/6698df.wgsl
index 1952b04..b14856c 100644
--- a/test/intrinsics/gen/ignore/6698df.wgsl
+++ b/test/intrinsics/gen/ignore/6698df.wgsl
@@ -28,18 +28,18 @@
   ignore(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_6698df();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_6698df();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_6698df();
 }
diff --git a/test/intrinsics/gen/ignore/6698df.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/6698df.wgsl.expected.wgsl
index af3f6b5..1754276 100644
--- a/test/intrinsics/gen/ignore/6698df.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/6698df.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   ignore(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_6698df();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_6698df();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_6698df();
 }
diff --git a/test/intrinsics/gen/ignore/ad88be.wgsl b/test/intrinsics/gen/ignore/ad88be.wgsl
index b957959..3812ea1 100644
--- a/test/intrinsics/gen/ignore/ad88be.wgsl
+++ b/test/intrinsics/gen/ignore/ad88be.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
 
 // fn ignore(texture_depth_cube_array)
 fn ignore_ad88be() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_ad88be();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_ad88be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_ad88be();
 }
diff --git a/test/intrinsics/gen/ignore/ad88be.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/ad88be.wgsl.expected.wgsl
index a371726..08fa4ea 100644
--- a/test/intrinsics/gen/ignore/ad88be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/ad88be.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
 fn ignore_ad88be() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_ad88be();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_ad88be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_ad88be();
 }
diff --git a/test/intrinsics/gen/ignore/b469af.wgsl b/test/intrinsics/gen/ignore/b469af.wgsl
index 581ebef..a640d8b 100644
--- a/test/intrinsics/gen/ignore/b469af.wgsl
+++ b/test/intrinsics/gen/ignore/b469af.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: sampler_comparison;
+@group(1) @binding(0) var arg_0: sampler_comparison;
 
 // fn ignore(sampler_comparison)
 fn ignore_b469af() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_b469af();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_b469af();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_b469af();
 }
diff --git a/test/intrinsics/gen/ignore/b469af.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/b469af.wgsl.expected.wgsl
index d2270a8..0c42c5c 100644
--- a/test/intrinsics/gen/ignore/b469af.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/b469af.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : sampler_comparison;
+@group(1) @binding(0) var arg_0 : sampler_comparison;
 
 fn ignore_b469af() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_b469af();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_b469af();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_b469af();
 }
diff --git a/test/intrinsics/gen/ignore/c8a0ee.wgsl b/test/intrinsics/gen/ignore/c8a0ee.wgsl
index 747f59b..773996b 100644
--- a/test/intrinsics/gen/ignore/c8a0ee.wgsl
+++ b/test/intrinsics/gen/ignore/c8a0ee.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
 
 // fn ignore(texture_depth_2d_array)
 fn ignore_c8a0ee() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_c8a0ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_c8a0ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_c8a0ee();
 }
diff --git a/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.wgsl
index abb1ae9..6b3aa11 100644
--- a/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
 fn ignore_c8a0ee() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_c8a0ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_c8a0ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_c8a0ee();
 }
diff --git a/test/intrinsics/gen/ignore/d91a2f.wgsl b/test/intrinsics/gen/ignore/d91a2f.wgsl
index 22a8df5..5bda0fb 100644
--- a/test/intrinsics/gen/ignore/d91a2f.wgsl
+++ b/test/intrinsics/gen/ignore/d91a2f.wgsl
@@ -28,18 +28,18 @@
   ignore(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_d91a2f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_d91a2f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_d91a2f();
 }
diff --git a/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.wgsl
index d1d3f3e..b877665 100644
--- a/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   ignore(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_d91a2f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_d91a2f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_d91a2f();
 }
diff --git a/test/intrinsics/gen/ignore/e0187b.wgsl b/test/intrinsics/gen/ignore/e0187b.wgsl
index d62957c..0a7b36d 100644
--- a/test/intrinsics/gen/ignore/e0187b.wgsl
+++ b/test/intrinsics/gen/ignore/e0187b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
 
 // fn ignore(texture_depth_2d)
 fn ignore_e0187b() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_e0187b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_e0187b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_e0187b();
 }
diff --git a/test/intrinsics/gen/ignore/e0187b.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/e0187b.wgsl.expected.wgsl
index aca8c14..0c3eb9d 100644
--- a/test/intrinsics/gen/ignore/e0187b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/e0187b.wgsl.expected.wgsl
@@ -2,24 +2,24 @@
   ignore(arg_0);
   ^^^^^^
 
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
 fn ignore_e0187b() {
   ignore(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_e0187b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_e0187b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_e0187b();
 }
diff --git a/test/intrinsics/gen/ignore/f414a6.wgsl b/test/intrinsics/gen/ignore/f414a6.wgsl
index 48b3a9b..a032392 100644
--- a/test/intrinsics/gen/ignore/f414a6.wgsl
+++ b/test/intrinsics/gen/ignore/f414a6.wgsl
@@ -28,18 +28,18 @@
   ignore(bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_f414a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_f414a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_f414a6();
 }
diff --git a/test/intrinsics/gen/ignore/f414a6.wgsl.expected.wgsl b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.wgsl
index 389da66..bf60901 100644
--- a/test/intrinsics/gen/ignore/f414a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   ignore(bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ignore_f414a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ignore_f414a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ignore_f414a6();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/84407e.wgsl b/test/intrinsics/gen/inverseSqrt/84407e.wgsl
index 39e9b85..f6160f1 100644
--- a/test/intrinsics/gen/inverseSqrt/84407e.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/84407e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = inverseSqrt(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_84407e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_84407e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_84407e();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.wgsl b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.wgsl
index a8350fc..707e317 100644
--- a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = inverseSqrt(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_84407e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_84407e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_84407e();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl
index 96b15558..e94567e 100644
--- a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = inverseSqrt(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_8f2bd2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_8f2bd2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_8f2bd2();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.wgsl b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.wgsl
index 303dfaf..5554030 100644
--- a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = inverseSqrt(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_8f2bd2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_8f2bd2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_8f2bd2();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl
index 1f24f0f..c189515 100644
--- a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = inverseSqrt(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_b197b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_b197b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_b197b1();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.wgsl b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.wgsl
index 471c231..dd8bd71 100644
--- a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = inverseSqrt(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_b197b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_b197b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_b197b1();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/c22347.wgsl b/test/intrinsics/gen/inverseSqrt/c22347.wgsl
index 0d3f7b0..20e13f2 100644
--- a/test/intrinsics/gen/inverseSqrt/c22347.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/c22347.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = inverseSqrt(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_c22347();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_c22347();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_c22347();
 }
diff --git a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.wgsl b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.wgsl
index 486a611..cc9c1a9 100644
--- a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = inverseSqrt(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   inverseSqrt_c22347();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   inverseSqrt_c22347();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   inverseSqrt_c22347();
 }
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl b/test/intrinsics/gen/isFinite/34d32b.wgsl
index ea71b39..20d8b32 100644
--- a/test/intrinsics/gen/isFinite/34d32b.wgsl
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<bool> = isFinite(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_34d32b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_34d32b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_34d32b();
 }
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.wgsl b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.wgsl
index e4cfe3f..8b38ba9 100644
--- a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec2<bool> = isFinite(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_34d32b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_34d32b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_34d32b();
 }
diff --git a/test/intrinsics/gen/isFinite/426f9f.wgsl b/test/intrinsics/gen/isFinite/426f9f.wgsl
index fd56d26..e43f7a6 100644
--- a/test/intrinsics/gen/isFinite/426f9f.wgsl
+++ b/test/intrinsics/gen/isFinite/426f9f.wgsl
@@ -28,18 +28,18 @@
   var res: bool = isFinite(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_426f9f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_426f9f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_426f9f();
 }
diff --git a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.wgsl b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.wgsl
index a0d931c..6dd9547 100644
--- a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : bool = isFinite(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_426f9f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_426f9f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_426f9f();
 }
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl b/test/intrinsics/gen/isFinite/8a23ad.wgsl
index b5611da..24a52c0 100644
--- a/test/intrinsics/gen/isFinite/8a23ad.wgsl
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<bool> = isFinite(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_8a23ad();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_8a23ad();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_8a23ad();
 }
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.wgsl b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.wgsl
index 807cfde..6aa23a5 100644
--- a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec3<bool> = isFinite(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_8a23ad();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_8a23ad();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_8a23ad();
 }
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl b/test/intrinsics/gen/isFinite/f31987.wgsl
index f7e6e54..0a3f631 100644
--- a/test/intrinsics/gen/isFinite/f31987.wgsl
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<bool> = isFinite(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_f31987();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_f31987();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_f31987();
 }
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.wgsl b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.wgsl
index a1361e1..a5e86db 100644
--- a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec4<bool> = isFinite(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isFinite_f31987();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isFinite_f31987();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isFinite_f31987();
 }
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl b/test/intrinsics/gen/isInf/666f2a.wgsl
index 7199b08..7550d27 100644
--- a/test/intrinsics/gen/isInf/666f2a.wgsl
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<bool> = isInf(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_666f2a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_666f2a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_666f2a();
 }
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.wgsl b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.wgsl
index e5076f5..4fa25cb 100644
--- a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec3<bool> = isInf(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_666f2a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_666f2a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_666f2a();
 }
diff --git a/test/intrinsics/gen/isInf/7bd98f.wgsl b/test/intrinsics/gen/isInf/7bd98f.wgsl
index e178e40..eaea74d 100644
--- a/test/intrinsics/gen/isInf/7bd98f.wgsl
+++ b/test/intrinsics/gen/isInf/7bd98f.wgsl
@@ -28,18 +28,18 @@
   var res: bool = isInf(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_7bd98f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_7bd98f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_7bd98f();
 }
diff --git a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.wgsl b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.wgsl
index 281dc74..82deb30 100644
--- a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : bool = isInf(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_7bd98f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_7bd98f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_7bd98f();
 }
diff --git a/test/intrinsics/gen/isInf/7e81b5.wgsl b/test/intrinsics/gen/isInf/7e81b5.wgsl
index d6fc7d2..0a96753 100644
--- a/test/intrinsics/gen/isInf/7e81b5.wgsl
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<bool> = isInf(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_7e81b5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_7e81b5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_7e81b5();
 }
diff --git a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.wgsl b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.wgsl
index 24b76af..3fced5a 100644
--- a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec4<bool> = isInf(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_7e81b5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_7e81b5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_7e81b5();
 }
diff --git a/test/intrinsics/gen/isInf/a46d6f.wgsl b/test/intrinsics/gen/isInf/a46d6f.wgsl
index 9919b5d..5841a41 100644
--- a/test/intrinsics/gen/isInf/a46d6f.wgsl
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<bool> = isInf(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_a46d6f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_a46d6f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_a46d6f();
 }
diff --git a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.wgsl b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.wgsl
index 26cac94..3fa68d9 100644
--- a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec2<bool> = isInf(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isInf_a46d6f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isInf_a46d6f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isInf_a46d6f();
 }
diff --git a/test/intrinsics/gen/isNan/1280ab.wgsl b/test/intrinsics/gen/isNan/1280ab.wgsl
index 6601a11..fb5e25c 100644
--- a/test/intrinsics/gen/isNan/1280ab.wgsl
+++ b/test/intrinsics/gen/isNan/1280ab.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<bool> = isNan(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_1280ab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_1280ab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_1280ab();
 }
diff --git a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.wgsl b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.wgsl
index c4fd059..ec27bcd 100644
--- a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec3<bool> = isNan(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_1280ab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_1280ab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_1280ab();
 }
diff --git a/test/intrinsics/gen/isNan/4d280d.wgsl b/test/intrinsics/gen/isNan/4d280d.wgsl
index 058d425..330440d 100644
--- a/test/intrinsics/gen/isNan/4d280d.wgsl
+++ b/test/intrinsics/gen/isNan/4d280d.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<bool> = isNan(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_4d280d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_4d280d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_4d280d();
 }
diff --git a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.wgsl b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.wgsl
index 097488c..57ba354 100644
--- a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec4<bool> = isNan(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_4d280d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_4d280d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_4d280d();
 }
diff --git a/test/intrinsics/gen/isNan/67ecd3.wgsl b/test/intrinsics/gen/isNan/67ecd3.wgsl
index 7237e05..9b082ec 100644
--- a/test/intrinsics/gen/isNan/67ecd3.wgsl
+++ b/test/intrinsics/gen/isNan/67ecd3.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<bool> = isNan(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_67ecd3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_67ecd3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_67ecd3();
 }
diff --git a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.wgsl b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.wgsl
index 49b0c8a..2f9573d 100644
--- a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec2<bool> = isNan(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_67ecd3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_67ecd3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_67ecd3();
 }
diff --git a/test/intrinsics/gen/isNan/e4978e.wgsl b/test/intrinsics/gen/isNan/e4978e.wgsl
index 8cf7130..f28a7d1 100644
--- a/test/intrinsics/gen/isNan/e4978e.wgsl
+++ b/test/intrinsics/gen/isNan/e4978e.wgsl
@@ -28,18 +28,18 @@
   var res: bool = isNan(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_e4978e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_e4978e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_e4978e();
 }
diff --git a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.wgsl b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.wgsl
index 12d2aa0..0e27431 100644
--- a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : bool = isNan(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNan_e4978e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNan_e4978e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNan_e4978e();
 }
diff --git a/test/intrinsics/gen/isNormal/863dcd.wgsl b/test/intrinsics/gen/isNormal/863dcd.wgsl
index ab0f294..a814ddb 100644
--- a/test/intrinsics/gen/isNormal/863dcd.wgsl
+++ b/test/intrinsics/gen/isNormal/863dcd.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<bool> = isNormal(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_863dcd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_863dcd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_863dcd();
 }
diff --git a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.wgsl b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.wgsl
index d9ba428..79f0261 100644
--- a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec4<bool> = isNormal(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_863dcd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_863dcd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_863dcd();
 }
diff --git a/test/intrinsics/gen/isNormal/b00ab1.wgsl b/test/intrinsics/gen/isNormal/b00ab1.wgsl
index 5a67dee..7113dcc 100644
--- a/test/intrinsics/gen/isNormal/b00ab1.wgsl
+++ b/test/intrinsics/gen/isNormal/b00ab1.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<bool> = isNormal(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_b00ab1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_b00ab1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_b00ab1();
 }
diff --git a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.wgsl b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.wgsl
index b85bc1f..c6b748c 100644
--- a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec2<bool> = isNormal(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_b00ab1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_b00ab1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_b00ab1();
 }
diff --git a/test/intrinsics/gen/isNormal/c286b7.wgsl b/test/intrinsics/gen/isNormal/c286b7.wgsl
index 2f87055..b44cb1f 100644
--- a/test/intrinsics/gen/isNormal/c286b7.wgsl
+++ b/test/intrinsics/gen/isNormal/c286b7.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<bool> = isNormal(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_c286b7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_c286b7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_c286b7();
 }
diff --git a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.wgsl b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.wgsl
index 4b36826..ca46949 100644
--- a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : vec3<bool> = isNormal(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_c286b7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_c286b7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_c286b7();
 }
diff --git a/test/intrinsics/gen/isNormal/c6e880.wgsl b/test/intrinsics/gen/isNormal/c6e880.wgsl
index d223b08..a5d8390 100644
--- a/test/intrinsics/gen/isNormal/c6e880.wgsl
+++ b/test/intrinsics/gen/isNormal/c6e880.wgsl
@@ -28,18 +28,18 @@
   var res: bool = isNormal(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_c6e880();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_c6e880();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_c6e880();
 }
diff --git a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.wgsl b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.wgsl
index 0061366..1dc6685 100644
--- a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.wgsl
@@ -6,18 +6,18 @@
   var res : bool = isNormal(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   isNormal_c6e880();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   isNormal_c6e880();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   isNormal_c6e880();
 }
diff --git a/test/intrinsics/gen/ldexp/a31cdc.wgsl b/test/intrinsics/gen/ldexp/a31cdc.wgsl
index f5df9a3..2994d5f 100644
--- a/test/intrinsics/gen/ldexp/a31cdc.wgsl
+++ b/test/intrinsics/gen/ldexp/a31cdc.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = ldexp(vec3<f32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_a31cdc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_a31cdc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_a31cdc();
 }
diff --git a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.wgsl b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.wgsl
index 975e921..357faa1 100644
--- a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = ldexp(vec3<f32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_a31cdc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_a31cdc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_a31cdc();
 }
diff --git a/test/intrinsics/gen/ldexp/abd718.wgsl b/test/intrinsics/gen/ldexp/abd718.wgsl
index 94ae023..5fec178 100644
--- a/test/intrinsics/gen/ldexp/abd718.wgsl
+++ b/test/intrinsics/gen/ldexp/abd718.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = ldexp(vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_abd718();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_abd718();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_abd718();
 }
diff --git a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.wgsl b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.wgsl
index bbd48db..87314bf 100644
--- a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = ldexp(vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_abd718();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_abd718();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_abd718();
 }
diff --git a/test/intrinsics/gen/ldexp/cc9cde.wgsl b/test/intrinsics/gen/ldexp/cc9cde.wgsl
index a2f0de9..9f4702e 100644
--- a/test/intrinsics/gen/ldexp/cc9cde.wgsl
+++ b/test/intrinsics/gen/ldexp/cc9cde.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = ldexp(vec4<f32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_cc9cde();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_cc9cde();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_cc9cde();
 }
diff --git a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.wgsl b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.wgsl
index b71f7fb..c2fc1ae 100644
--- a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = ldexp(vec4<f32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_cc9cde();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_cc9cde();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_cc9cde();
 }
diff --git a/test/intrinsics/gen/ldexp/db8b49.wgsl b/test/intrinsics/gen/ldexp/db8b49.wgsl
index 9975cf4..f0f29a1 100644
--- a/test/intrinsics/gen/ldexp/db8b49.wgsl
+++ b/test/intrinsics/gen/ldexp/db8b49.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = ldexp(1.0, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_db8b49();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_db8b49();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_db8b49();
 }
diff --git a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.wgsl b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.wgsl
index 7c5e77d..41f84f9 100644
--- a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = ldexp(1.0, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   ldexp_db8b49();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   ldexp_db8b49();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   ldexp_db8b49();
 }
diff --git a/test/intrinsics/gen/length/056071.wgsl b/test/intrinsics/gen/length/056071.wgsl
index e9ada2c..46dfdfe 100644
--- a/test/intrinsics/gen/length/056071.wgsl
+++ b/test/intrinsics/gen/length/056071.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = length(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_056071();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_056071();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_056071();
 }
diff --git a/test/intrinsics/gen/length/056071.wgsl.expected.wgsl b/test/intrinsics/gen/length/056071.wgsl.expected.wgsl
index 7487a7a..a7dddf9 100644
--- a/test/intrinsics/gen/length/056071.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/length/056071.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = length(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_056071();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_056071();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_056071();
 }
diff --git a/test/intrinsics/gen/length/602a17.wgsl b/test/intrinsics/gen/length/602a17.wgsl
index e39f84e..4458a54 100644
--- a/test/intrinsics/gen/length/602a17.wgsl
+++ b/test/intrinsics/gen/length/602a17.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = length(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_602a17();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_602a17();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_602a17();
 }
diff --git a/test/intrinsics/gen/length/602a17.wgsl.expected.wgsl b/test/intrinsics/gen/length/602a17.wgsl.expected.wgsl
index b00a0e1..dbf073b 100644
--- a/test/intrinsics/gen/length/602a17.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/length/602a17.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = length(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_602a17();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_602a17();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_602a17();
 }
diff --git a/test/intrinsics/gen/length/afde8b.wgsl b/test/intrinsics/gen/length/afde8b.wgsl
index d66503f..0e7faf2 100644
--- a/test/intrinsics/gen/length/afde8b.wgsl
+++ b/test/intrinsics/gen/length/afde8b.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = length(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_afde8b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_afde8b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_afde8b();
 }
diff --git a/test/intrinsics/gen/length/afde8b.wgsl.expected.wgsl b/test/intrinsics/gen/length/afde8b.wgsl.expected.wgsl
index 7bc1249..04d7497 100644
--- a/test/intrinsics/gen/length/afde8b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/length/afde8b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = length(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_afde8b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_afde8b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_afde8b();
 }
diff --git a/test/intrinsics/gen/length/becebf.wgsl b/test/intrinsics/gen/length/becebf.wgsl
index 5682959..5029412 100644
--- a/test/intrinsics/gen/length/becebf.wgsl
+++ b/test/intrinsics/gen/length/becebf.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = length(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_becebf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_becebf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_becebf();
 }
diff --git a/test/intrinsics/gen/length/becebf.wgsl.expected.wgsl b/test/intrinsics/gen/length/becebf.wgsl.expected.wgsl
index 2dfa36f..2a90f07 100644
--- a/test/intrinsics/gen/length/becebf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/length/becebf.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = length(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   length_becebf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   length_becebf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   length_becebf();
 }
diff --git a/test/intrinsics/gen/log/3da25a.wgsl b/test/intrinsics/gen/log/3da25a.wgsl
index 785a7f4..12e9fe3 100644
--- a/test/intrinsics/gen/log/3da25a.wgsl
+++ b/test/intrinsics/gen/log/3da25a.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = log(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_3da25a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_3da25a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_3da25a();
 }
diff --git a/test/intrinsics/gen/log/3da25a.wgsl.expected.wgsl b/test/intrinsics/gen/log/3da25a.wgsl.expected.wgsl
index fd72a7e..2265445 100644
--- a/test/intrinsics/gen/log/3da25a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log/3da25a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = log(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_3da25a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_3da25a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_3da25a();
 }
diff --git a/test/intrinsics/gen/log/7114a6.wgsl b/test/intrinsics/gen/log/7114a6.wgsl
index 3d16357..0332f5b 100644
--- a/test/intrinsics/gen/log/7114a6.wgsl
+++ b/test/intrinsics/gen/log/7114a6.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = log(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_7114a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_7114a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_7114a6();
 }
diff --git a/test/intrinsics/gen/log/7114a6.wgsl.expected.wgsl b/test/intrinsics/gen/log/7114a6.wgsl.expected.wgsl
index 9e282b4..6a688f0 100644
--- a/test/intrinsics/gen/log/7114a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log/7114a6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = log(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_7114a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_7114a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_7114a6();
 }
diff --git a/test/intrinsics/gen/log/b2ce28.wgsl b/test/intrinsics/gen/log/b2ce28.wgsl
index a302729..be0a07b 100644
--- a/test/intrinsics/gen/log/b2ce28.wgsl
+++ b/test/intrinsics/gen/log/b2ce28.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = log(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_b2ce28();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_b2ce28();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_b2ce28();
 }
diff --git a/test/intrinsics/gen/log/b2ce28.wgsl.expected.wgsl b/test/intrinsics/gen/log/b2ce28.wgsl.expected.wgsl
index 1167e0a..023eb1b 100644
--- a/test/intrinsics/gen/log/b2ce28.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log/b2ce28.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = log(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_b2ce28();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_b2ce28();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_b2ce28();
 }
diff --git a/test/intrinsics/gen/log/f4c570.wgsl b/test/intrinsics/gen/log/f4c570.wgsl
index 513e900..e705146 100644
--- a/test/intrinsics/gen/log/f4c570.wgsl
+++ b/test/intrinsics/gen/log/f4c570.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = log(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_f4c570();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_f4c570();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_f4c570();
 }
diff --git a/test/intrinsics/gen/log/f4c570.wgsl.expected.wgsl b/test/intrinsics/gen/log/f4c570.wgsl.expected.wgsl
index 01cb910..9317aad 100644
--- a/test/intrinsics/gen/log/f4c570.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log/f4c570.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = log(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log_f4c570();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log_f4c570();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log_f4c570();
 }
diff --git a/test/intrinsics/gen/log2/4036ed.wgsl b/test/intrinsics/gen/log2/4036ed.wgsl
index b9e6cda..0932fb4 100644
--- a/test/intrinsics/gen/log2/4036ed.wgsl
+++ b/test/intrinsics/gen/log2/4036ed.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = log2(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_4036ed();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_4036ed();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_4036ed();
 }
diff --git a/test/intrinsics/gen/log2/4036ed.wgsl.expected.wgsl b/test/intrinsics/gen/log2/4036ed.wgsl.expected.wgsl
index ab03ce1..e64775f 100644
--- a/test/intrinsics/gen/log2/4036ed.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log2/4036ed.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = log2(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_4036ed();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_4036ed();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_4036ed();
 }
diff --git a/test/intrinsics/gen/log2/902988.wgsl b/test/intrinsics/gen/log2/902988.wgsl
index 8d01023..83325a2 100644
--- a/test/intrinsics/gen/log2/902988.wgsl
+++ b/test/intrinsics/gen/log2/902988.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = log2(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_902988();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_902988();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_902988();
 }
diff --git a/test/intrinsics/gen/log2/902988.wgsl.expected.wgsl b/test/intrinsics/gen/log2/902988.wgsl.expected.wgsl
index 9d4277b..345da9e 100644
--- a/test/intrinsics/gen/log2/902988.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log2/902988.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = log2(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_902988();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_902988();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_902988();
 }
diff --git a/test/intrinsics/gen/log2/adb233.wgsl b/test/intrinsics/gen/log2/adb233.wgsl
index 3270689..f231a4a 100644
--- a/test/intrinsics/gen/log2/adb233.wgsl
+++ b/test/intrinsics/gen/log2/adb233.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = log2(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_adb233();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_adb233();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_adb233();
 }
diff --git a/test/intrinsics/gen/log2/adb233.wgsl.expected.wgsl b/test/intrinsics/gen/log2/adb233.wgsl.expected.wgsl
index e41ac20..89634c2 100644
--- a/test/intrinsics/gen/log2/adb233.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log2/adb233.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = log2(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_adb233();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_adb233();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_adb233();
 }
diff --git a/test/intrinsics/gen/log2/aea659.wgsl b/test/intrinsics/gen/log2/aea659.wgsl
index 3700f20..d874511 100644
--- a/test/intrinsics/gen/log2/aea659.wgsl
+++ b/test/intrinsics/gen/log2/aea659.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = log2(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_aea659();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_aea659();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_aea659();
 }
diff --git a/test/intrinsics/gen/log2/aea659.wgsl.expected.wgsl b/test/intrinsics/gen/log2/aea659.wgsl.expected.wgsl
index aa490dd..a77648e 100644
--- a/test/intrinsics/gen/log2/aea659.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/log2/aea659.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = log2(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   log2_aea659();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   log2_aea659();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   log2_aea659();
 }
diff --git a/test/intrinsics/gen/max/0c0aae.wgsl b/test/intrinsics/gen/max/0c0aae.wgsl
index 9700838..1dcd5e8 100644
--- a/test/intrinsics/gen/max/0c0aae.wgsl
+++ b/test/intrinsics/gen/max/0c0aae.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = max(1u, 1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_0c0aae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_0c0aae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_0c0aae();
 }
diff --git a/test/intrinsics/gen/max/0c0aae.wgsl.expected.wgsl b/test/intrinsics/gen/max/0c0aae.wgsl.expected.wgsl
index b463469..a34b9ff 100644
--- a/test/intrinsics/gen/max/0c0aae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/0c0aae.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = max(1u, 1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_0c0aae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_0c0aae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_0c0aae();
 }
diff --git a/test/intrinsics/gen/max/25eafe.wgsl b/test/intrinsics/gen/max/25eafe.wgsl
index 4940f1f..238cba1 100644
--- a/test/intrinsics/gen/max/25eafe.wgsl
+++ b/test/intrinsics/gen/max/25eafe.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = max(vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_25eafe();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_25eafe();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_25eafe();
 }
diff --git a/test/intrinsics/gen/max/25eafe.wgsl.expected.wgsl b/test/intrinsics/gen/max/25eafe.wgsl.expected.wgsl
index 55e740b..7b9f06a 100644
--- a/test/intrinsics/gen/max/25eafe.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/25eafe.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = max(vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_25eafe();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_25eafe();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_25eafe();
 }
diff --git a/test/intrinsics/gen/max/320815.wgsl b/test/intrinsics/gen/max/320815.wgsl
index 1bf7867..e4b11d1 100644
--- a/test/intrinsics/gen/max/320815.wgsl
+++ b/test/intrinsics/gen/max/320815.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = max(vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_320815();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_320815();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_320815();
 }
diff --git a/test/intrinsics/gen/max/320815.wgsl.expected.wgsl b/test/intrinsics/gen/max/320815.wgsl.expected.wgsl
index 16d126f..04e54a0 100644
--- a/test/intrinsics/gen/max/320815.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/320815.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = max(vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_320815();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_320815();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_320815();
 }
diff --git a/test/intrinsics/gen/max/44a39d.wgsl b/test/intrinsics/gen/max/44a39d.wgsl
index 039fe2f..9af6704 100644
--- a/test/intrinsics/gen/max/44a39d.wgsl
+++ b/test/intrinsics/gen/max/44a39d.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = max(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_44a39d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_44a39d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_44a39d();
 }
diff --git a/test/intrinsics/gen/max/44a39d.wgsl.expected.wgsl b/test/intrinsics/gen/max/44a39d.wgsl.expected.wgsl
index d39969c..1913b8f 100644
--- a/test/intrinsics/gen/max/44a39d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/44a39d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = max(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_44a39d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_44a39d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_44a39d();
 }
diff --git a/test/intrinsics/gen/max/453e04.wgsl b/test/intrinsics/gen/max/453e04.wgsl
index 14eab28..b3813d9 100644
--- a/test/intrinsics/gen/max/453e04.wgsl
+++ b/test/intrinsics/gen/max/453e04.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = max(vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_453e04();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_453e04();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_453e04();
 }
diff --git a/test/intrinsics/gen/max/453e04.wgsl.expected.wgsl b/test/intrinsics/gen/max/453e04.wgsl.expected.wgsl
index ba0921f..39e7e48 100644
--- a/test/intrinsics/gen/max/453e04.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/453e04.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = max(vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_453e04();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_453e04();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_453e04();
 }
diff --git a/test/intrinsics/gen/max/462050.wgsl b/test/intrinsics/gen/max/462050.wgsl
index b6bc2da..03523b9 100644
--- a/test/intrinsics/gen/max/462050.wgsl
+++ b/test/intrinsics/gen/max/462050.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = max(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_462050();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_462050();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_462050();
 }
diff --git a/test/intrinsics/gen/max/462050.wgsl.expected.wgsl b/test/intrinsics/gen/max/462050.wgsl.expected.wgsl
index f0f482f..eec4107 100644
--- a/test/intrinsics/gen/max/462050.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/462050.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = max(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_462050();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_462050();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_462050();
 }
diff --git a/test/intrinsics/gen/max/4883ac.wgsl b/test/intrinsics/gen/max/4883ac.wgsl
index 607e45e..a0244ea 100644
--- a/test/intrinsics/gen/max/4883ac.wgsl
+++ b/test/intrinsics/gen/max/4883ac.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = max(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_4883ac();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_4883ac();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_4883ac();
 }
diff --git a/test/intrinsics/gen/max/4883ac.wgsl.expected.wgsl b/test/intrinsics/gen/max/4883ac.wgsl.expected.wgsl
index 4f4feab..cc37098 100644
--- a/test/intrinsics/gen/max/4883ac.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/4883ac.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = max(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_4883ac();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_4883ac();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_4883ac();
 }
diff --git a/test/intrinsics/gen/max/85e6bc.wgsl b/test/intrinsics/gen/max/85e6bc.wgsl
index ff478ac..5e8f666 100644
--- a/test/intrinsics/gen/max/85e6bc.wgsl
+++ b/test/intrinsics/gen/max/85e6bc.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = max(vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_85e6bc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_85e6bc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_85e6bc();
 }
diff --git a/test/intrinsics/gen/max/85e6bc.wgsl.expected.wgsl b/test/intrinsics/gen/max/85e6bc.wgsl.expected.wgsl
index b3d9371..6f6b39f 100644
--- a/test/intrinsics/gen/max/85e6bc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/85e6bc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = max(vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_85e6bc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_85e6bc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_85e6bc();
 }
diff --git a/test/intrinsics/gen/max/a93419.wgsl b/test/intrinsics/gen/max/a93419.wgsl
index 60e7ee6..4dc296a 100644
--- a/test/intrinsics/gen/max/a93419.wgsl
+++ b/test/intrinsics/gen/max/a93419.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = max(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_a93419();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_a93419();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_a93419();
 }
diff --git a/test/intrinsics/gen/max/a93419.wgsl.expected.wgsl b/test/intrinsics/gen/max/a93419.wgsl.expected.wgsl
index 9e06421..8c1c938 100644
--- a/test/intrinsics/gen/max/a93419.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/a93419.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = max(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_a93419();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_a93419();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_a93419();
 }
diff --git a/test/intrinsics/gen/max/b1b73a.wgsl b/test/intrinsics/gen/max/b1b73a.wgsl
index a05dd2a..17a9808 100644
--- a/test/intrinsics/gen/max/b1b73a.wgsl
+++ b/test/intrinsics/gen/max/b1b73a.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = max(vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_b1b73a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_b1b73a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_b1b73a();
 }
diff --git a/test/intrinsics/gen/max/b1b73a.wgsl.expected.wgsl b/test/intrinsics/gen/max/b1b73a.wgsl.expected.wgsl
index 57ebf45..ffe0dc5 100644
--- a/test/intrinsics/gen/max/b1b73a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/b1b73a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = max(vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_b1b73a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_b1b73a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_b1b73a();
 }
diff --git a/test/intrinsics/gen/max/ce7c30.wgsl b/test/intrinsics/gen/max/ce7c30.wgsl
index 109638e..167bd6c 100644
--- a/test/intrinsics/gen/max/ce7c30.wgsl
+++ b/test/intrinsics/gen/max/ce7c30.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = max(1, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_ce7c30();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_ce7c30();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_ce7c30();
 }
diff --git a/test/intrinsics/gen/max/ce7c30.wgsl.expected.wgsl b/test/intrinsics/gen/max/ce7c30.wgsl.expected.wgsl
index 62b9142..a9c3618 100644
--- a/test/intrinsics/gen/max/ce7c30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/ce7c30.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = max(1, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_ce7c30();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_ce7c30();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_ce7c30();
 }
diff --git a/test/intrinsics/gen/max/e8192f.wgsl b/test/intrinsics/gen/max/e8192f.wgsl
index 5f81944..3691990 100644
--- a/test/intrinsics/gen/max/e8192f.wgsl
+++ b/test/intrinsics/gen/max/e8192f.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = max(vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_e8192f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_e8192f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_e8192f();
 }
diff --git a/test/intrinsics/gen/max/e8192f.wgsl.expected.wgsl b/test/intrinsics/gen/max/e8192f.wgsl.expected.wgsl
index a0f6b1b..08d02f6 100644
--- a/test/intrinsics/gen/max/e8192f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/max/e8192f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = max(vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   max_e8192f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   max_e8192f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   max_e8192f();
 }
diff --git a/test/intrinsics/gen/min/03c7e3.wgsl b/test/intrinsics/gen/min/03c7e3.wgsl
index 266a4e7..ed5cb3d 100644
--- a/test/intrinsics/gen/min/03c7e3.wgsl
+++ b/test/intrinsics/gen/min/03c7e3.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = min(vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_03c7e3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_03c7e3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_03c7e3();
 }
diff --git a/test/intrinsics/gen/min/03c7e3.wgsl.expected.wgsl b/test/intrinsics/gen/min/03c7e3.wgsl.expected.wgsl
index d1d1273..8c0cc93 100644
--- a/test/intrinsics/gen/min/03c7e3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/03c7e3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = min(vec2<i32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_03c7e3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_03c7e3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_03c7e3();
 }
diff --git a/test/intrinsics/gen/min/0dc614.wgsl b/test/intrinsics/gen/min/0dc614.wgsl
index 4834aef..976011e 100644
--- a/test/intrinsics/gen/min/0dc614.wgsl
+++ b/test/intrinsics/gen/min/0dc614.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = min(vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_0dc614();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_0dc614();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_0dc614();
 }
diff --git a/test/intrinsics/gen/min/0dc614.wgsl.expected.wgsl b/test/intrinsics/gen/min/0dc614.wgsl.expected.wgsl
index a9ddda4..9833270 100644
--- a/test/intrinsics/gen/min/0dc614.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/0dc614.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = min(vec4<u32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_0dc614();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_0dc614();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_0dc614();
 }
diff --git a/test/intrinsics/gen/min/3941e1.wgsl b/test/intrinsics/gen/min/3941e1.wgsl
index 3583504..b45498f 100644
--- a/test/intrinsics/gen/min/3941e1.wgsl
+++ b/test/intrinsics/gen/min/3941e1.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = min(vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_3941e1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_3941e1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_3941e1();
 }
diff --git a/test/intrinsics/gen/min/3941e1.wgsl.expected.wgsl b/test/intrinsics/gen/min/3941e1.wgsl.expected.wgsl
index 8ea9508..19dd5ee 100644
--- a/test/intrinsics/gen/min/3941e1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/3941e1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = min(vec4<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_3941e1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_3941e1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_3941e1();
 }
diff --git a/test/intrinsics/gen/min/46c5d3.wgsl b/test/intrinsics/gen/min/46c5d3.wgsl
index 764435e..b3d8710 100644
--- a/test/intrinsics/gen/min/46c5d3.wgsl
+++ b/test/intrinsics/gen/min/46c5d3.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = min(1u, 1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_46c5d3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_46c5d3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_46c5d3();
 }
diff --git a/test/intrinsics/gen/min/46c5d3.wgsl.expected.wgsl b/test/intrinsics/gen/min/46c5d3.wgsl.expected.wgsl
index 18b23e5..2beab9a 100644
--- a/test/intrinsics/gen/min/46c5d3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/46c5d3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = min(1u, 1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_46c5d3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_46c5d3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_46c5d3();
 }
diff --git a/test/intrinsics/gen/min/82b28f.wgsl b/test/intrinsics/gen/min/82b28f.wgsl
index 37011d3..01dfafd 100644
--- a/test/intrinsics/gen/min/82b28f.wgsl
+++ b/test/intrinsics/gen/min/82b28f.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = min(vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_82b28f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_82b28f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_82b28f();
 }
diff --git a/test/intrinsics/gen/min/82b28f.wgsl.expected.wgsl b/test/intrinsics/gen/min/82b28f.wgsl.expected.wgsl
index 7ba2e80..a942532 100644
--- a/test/intrinsics/gen/min/82b28f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/82b28f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = min(vec2<u32>(), vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_82b28f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_82b28f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_82b28f();
 }
diff --git a/test/intrinsics/gen/min/93cfc4.wgsl b/test/intrinsics/gen/min/93cfc4.wgsl
index 88c9a51..91bc5af 100644
--- a/test/intrinsics/gen/min/93cfc4.wgsl
+++ b/test/intrinsics/gen/min/93cfc4.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = min(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_93cfc4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_93cfc4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_93cfc4();
 }
diff --git a/test/intrinsics/gen/min/93cfc4.wgsl.expected.wgsl b/test/intrinsics/gen/min/93cfc4.wgsl.expected.wgsl
index 0b0cacd..c66aae0 100644
--- a/test/intrinsics/gen/min/93cfc4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/93cfc4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = min(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_93cfc4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_93cfc4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_93cfc4();
 }
diff --git a/test/intrinsics/gen/min/a45171.wgsl b/test/intrinsics/gen/min/a45171.wgsl
index 68aae17..01b49b4 100644
--- a/test/intrinsics/gen/min/a45171.wgsl
+++ b/test/intrinsics/gen/min/a45171.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = min(vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_a45171();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_a45171();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_a45171();
 }
diff --git a/test/intrinsics/gen/min/a45171.wgsl.expected.wgsl b/test/intrinsics/gen/min/a45171.wgsl.expected.wgsl
index aca6065..ade6f57 100644
--- a/test/intrinsics/gen/min/a45171.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/a45171.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = min(vec3<i32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_a45171();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_a45171();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_a45171();
 }
diff --git a/test/intrinsics/gen/min/aa28ad.wgsl b/test/intrinsics/gen/min/aa28ad.wgsl
index c197dbf..cd9775f 100644
--- a/test/intrinsics/gen/min/aa28ad.wgsl
+++ b/test/intrinsics/gen/min/aa28ad.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = min(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_aa28ad();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_aa28ad();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_aa28ad();
 }
diff --git a/test/intrinsics/gen/min/aa28ad.wgsl.expected.wgsl b/test/intrinsics/gen/min/aa28ad.wgsl.expected.wgsl
index 63f7e84..0830734 100644
--- a/test/intrinsics/gen/min/aa28ad.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/aa28ad.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = min(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_aa28ad();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_aa28ad();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_aa28ad();
 }
diff --git a/test/intrinsics/gen/min/af326d.wgsl b/test/intrinsics/gen/min/af326d.wgsl
index 55c9f80..0a1cde9d 100644
--- a/test/intrinsics/gen/min/af326d.wgsl
+++ b/test/intrinsics/gen/min/af326d.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = min(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_af326d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_af326d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_af326d();
 }
diff --git a/test/intrinsics/gen/min/af326d.wgsl.expected.wgsl b/test/intrinsics/gen/min/af326d.wgsl.expected.wgsl
index a5bc8f3..c0500c3 100644
--- a/test/intrinsics/gen/min/af326d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/af326d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = min(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_af326d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_af326d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_af326d();
 }
diff --git a/test/intrinsics/gen/min/c70bb7.wgsl b/test/intrinsics/gen/min/c70bb7.wgsl
index 15bf278..20d33ea 100644
--- a/test/intrinsics/gen/min/c70bb7.wgsl
+++ b/test/intrinsics/gen/min/c70bb7.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = min(vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_c70bb7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_c70bb7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_c70bb7();
 }
diff --git a/test/intrinsics/gen/min/c70bb7.wgsl.expected.wgsl b/test/intrinsics/gen/min/c70bb7.wgsl.expected.wgsl
index 642b600..d113cdb 100644
--- a/test/intrinsics/gen/min/c70bb7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/c70bb7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = min(vec3<u32>(), vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_c70bb7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_c70bb7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_c70bb7();
 }
diff --git a/test/intrinsics/gen/min/c73147.wgsl b/test/intrinsics/gen/min/c73147.wgsl
index 6bf3b77..25b6ce2 100644
--- a/test/intrinsics/gen/min/c73147.wgsl
+++ b/test/intrinsics/gen/min/c73147.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = min(1, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_c73147();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_c73147();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_c73147();
 }
diff --git a/test/intrinsics/gen/min/c73147.wgsl.expected.wgsl b/test/intrinsics/gen/min/c73147.wgsl.expected.wgsl
index 220e922..3221e2e 100644
--- a/test/intrinsics/gen/min/c73147.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/c73147.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = min(1, 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_c73147();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_c73147();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_c73147();
 }
diff --git a/test/intrinsics/gen/min/c76fa6.wgsl b/test/intrinsics/gen/min/c76fa6.wgsl
index b8ab82c..367f8f5 100644
--- a/test/intrinsics/gen/min/c76fa6.wgsl
+++ b/test/intrinsics/gen/min/c76fa6.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = min(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_c76fa6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_c76fa6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_c76fa6();
 }
diff --git a/test/intrinsics/gen/min/c76fa6.wgsl.expected.wgsl b/test/intrinsics/gen/min/c76fa6.wgsl.expected.wgsl
index 460fcc8..3a01a88 100644
--- a/test/intrinsics/gen/min/c76fa6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/min/c76fa6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = min(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   min_c76fa6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   min_c76fa6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   min_c76fa6();
 }
diff --git a/test/intrinsics/gen/mix/0c8c33.wgsl b/test/intrinsics/gen/mix/0c8c33.wgsl
index 001d31d..c2ba55d 100644
--- a/test/intrinsics/gen/mix/0c8c33.wgsl
+++ b/test/intrinsics/gen/mix/0c8c33.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = mix(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_0c8c33();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_0c8c33();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_0c8c33();
 }
diff --git a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.wgsl b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.wgsl
index 26b1f2e..d76f3e3 100644
--- a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = mix(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_0c8c33();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_0c8c33();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_0c8c33();
 }
diff --git a/test/intrinsics/gen/mix/1faeb1.wgsl b/test/intrinsics/gen/mix/1faeb1.wgsl
index 4d43609..948163b 100644
--- a/test/intrinsics/gen/mix/1faeb1.wgsl
+++ b/test/intrinsics/gen/mix/1faeb1.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = mix(vec4<f32>(), vec4<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_1faeb1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_1faeb1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_1faeb1();
 }
diff --git a/test/intrinsics/gen/mix/1faeb1.wgsl.expected.wgsl b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.wgsl
index 81537b5..ffeab6a 100644
--- a/test/intrinsics/gen/mix/1faeb1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = mix(vec4<f32>(), vec4<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_1faeb1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_1faeb1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_1faeb1();
 }
diff --git a/test/intrinsics/gen/mix/2fadab.wgsl b/test/intrinsics/gen/mix/2fadab.wgsl
index e20610b..94551f9 100644
--- a/test/intrinsics/gen/mix/2fadab.wgsl
+++ b/test/intrinsics/gen/mix/2fadab.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = mix(vec2<f32>(), vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_2fadab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_2fadab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_2fadab();
 }
diff --git a/test/intrinsics/gen/mix/2fadab.wgsl.expected.wgsl b/test/intrinsics/gen/mix/2fadab.wgsl.expected.wgsl
index bcf0f91..d084ab6 100644
--- a/test/intrinsics/gen/mix/2fadab.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/2fadab.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = mix(vec2<f32>(), vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_2fadab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_2fadab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_2fadab();
 }
diff --git a/test/intrinsics/gen/mix/315264.wgsl b/test/intrinsics/gen/mix/315264.wgsl
index 3ccb009..3c8a050 100644
--- a/test/intrinsics/gen/mix/315264.wgsl
+++ b/test/intrinsics/gen/mix/315264.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = mix(vec3<f32>(), vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_315264();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_315264();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_315264();
 }
diff --git a/test/intrinsics/gen/mix/315264.wgsl.expected.wgsl b/test/intrinsics/gen/mix/315264.wgsl.expected.wgsl
index a870423..40fae02 100644
--- a/test/intrinsics/gen/mix/315264.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/315264.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = mix(vec3<f32>(), vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_315264();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_315264();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_315264();
 }
diff --git a/test/intrinsics/gen/mix/4f0b5e.wgsl b/test/intrinsics/gen/mix/4f0b5e.wgsl
index fd14e33..327cd1f 100644
--- a/test/intrinsics/gen/mix/4f0b5e.wgsl
+++ b/test/intrinsics/gen/mix/4f0b5e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = mix(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_4f0b5e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_4f0b5e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_4f0b5e();
 }
diff --git a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.wgsl b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.wgsl
index 7eb76de..67679c4 100644
--- a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = mix(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_4f0b5e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_4f0b5e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_4f0b5e();
 }
diff --git a/test/intrinsics/gen/mix/6f8adc.wgsl b/test/intrinsics/gen/mix/6f8adc.wgsl
index 577a0e9..ed6872f 100644
--- a/test/intrinsics/gen/mix/6f8adc.wgsl
+++ b/test/intrinsics/gen/mix/6f8adc.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = mix(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_6f8adc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_6f8adc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_6f8adc();
 }
diff --git a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.wgsl b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.wgsl
index ccb03a4..2bd55cc 100644
--- a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = mix(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_6f8adc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_6f8adc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_6f8adc();
 }
diff --git a/test/intrinsics/gen/mix/c37ede.wgsl b/test/intrinsics/gen/mix/c37ede.wgsl
index a66000c..59185cf 100644
--- a/test/intrinsics/gen/mix/c37ede.wgsl
+++ b/test/intrinsics/gen/mix/c37ede.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = mix(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_c37ede();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_c37ede();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_c37ede();
 }
diff --git a/test/intrinsics/gen/mix/c37ede.wgsl.expected.wgsl b/test/intrinsics/gen/mix/c37ede.wgsl.expected.wgsl
index b77b7b7..4d3d087 100644
--- a/test/intrinsics/gen/mix/c37ede.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/mix/c37ede.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = mix(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   mix_c37ede();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   mix_c37ede();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   mix_c37ede();
 }
diff --git a/test/intrinsics/gen/modf/180fed.wgsl b/test/intrinsics/gen/modf/180fed.wgsl
index a819d16..c9ad660 100644
--- a/test/intrinsics/gen/modf/180fed.wgsl
+++ b/test/intrinsics/gen/modf/180fed.wgsl
@@ -28,18 +28,18 @@
   var res = modf(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_180fed();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_180fed();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_180fed();
 }
diff --git a/test/intrinsics/gen/modf/180fed.wgsl.expected.wgsl b/test/intrinsics/gen/modf/180fed.wgsl.expected.wgsl
index 5bd93a7..3865c22 100644
--- a/test/intrinsics/gen/modf/180fed.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/180fed.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = modf(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_180fed();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_180fed();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_180fed();
 }
diff --git a/test/intrinsics/gen/modf/9b75f7.wgsl b/test/intrinsics/gen/modf/9b75f7.wgsl
index 1f340bc..982a75c 100644
--- a/test/intrinsics/gen/modf/9b75f7.wgsl
+++ b/test/intrinsics/gen/modf/9b75f7.wgsl
@@ -28,18 +28,18 @@
   var res = modf(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_9b75f7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_9b75f7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_9b75f7();
 }
diff --git a/test/intrinsics/gen/modf/9b75f7.wgsl.expected.wgsl b/test/intrinsics/gen/modf/9b75f7.wgsl.expected.wgsl
index 3b39732..90eaf3a 100644
--- a/test/intrinsics/gen/modf/9b75f7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/9b75f7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = modf(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_9b75f7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_9b75f7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_9b75f7();
 }
diff --git a/test/intrinsics/gen/modf/ec2dbc.wgsl b/test/intrinsics/gen/modf/ec2dbc.wgsl
index 7483d40..8de77ad 100644
--- a/test/intrinsics/gen/modf/ec2dbc.wgsl
+++ b/test/intrinsics/gen/modf/ec2dbc.wgsl
@@ -28,18 +28,18 @@
   var res = modf(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_ec2dbc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_ec2dbc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_ec2dbc();
 }
diff --git a/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.wgsl b/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.wgsl
index 22848f0..6c3380d 100644
--- a/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = modf(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_ec2dbc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_ec2dbc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_ec2dbc();
 }
diff --git a/test/intrinsics/gen/modf/f5f20d.wgsl b/test/intrinsics/gen/modf/f5f20d.wgsl
index 4088e06..0a0dcf5 100644
--- a/test/intrinsics/gen/modf/f5f20d.wgsl
+++ b/test/intrinsics/gen/modf/f5f20d.wgsl
@@ -28,18 +28,18 @@
   var res = modf(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_f5f20d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_f5f20d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_f5f20d();
 }
diff --git a/test/intrinsics/gen/modf/f5f20d.wgsl.expected.wgsl b/test/intrinsics/gen/modf/f5f20d.wgsl.expected.wgsl
index ad5bd3d..8dea55c 100644
--- a/test/intrinsics/gen/modf/f5f20d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/modf/f5f20d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res = modf(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   modf_f5f20d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   modf_f5f20d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   modf_f5f20d();
 }
diff --git a/test/intrinsics/gen/normalize/64d8c0.wgsl b/test/intrinsics/gen/normalize/64d8c0.wgsl
index 1f77f33..2109b61 100644
--- a/test/intrinsics/gen/normalize/64d8c0.wgsl
+++ b/test/intrinsics/gen/normalize/64d8c0.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = normalize(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   normalize_64d8c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   normalize_64d8c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   normalize_64d8c0();
 }
diff --git a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.wgsl b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.wgsl
index 0ea9def..57444c8 100644
--- a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = normalize(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   normalize_64d8c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   normalize_64d8c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   normalize_64d8c0();
 }
diff --git a/test/intrinsics/gen/normalize/9a0aab.wgsl b/test/intrinsics/gen/normalize/9a0aab.wgsl
index 8786048..12bf4ac 100644
--- a/test/intrinsics/gen/normalize/9a0aab.wgsl
+++ b/test/intrinsics/gen/normalize/9a0aab.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = normalize(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   normalize_9a0aab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   normalize_9a0aab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   normalize_9a0aab();
 }
diff --git a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.wgsl b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.wgsl
index 77bca7f..1b3e019 100644
--- a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = normalize(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   normalize_9a0aab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   normalize_9a0aab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   normalize_9a0aab();
 }
diff --git a/test/intrinsics/gen/normalize/fc2ef1.wgsl b/test/intrinsics/gen/normalize/fc2ef1.wgsl
index 2c41820..0c11b89 100644
--- a/test/intrinsics/gen/normalize/fc2ef1.wgsl
+++ b/test/intrinsics/gen/normalize/fc2ef1.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = normalize(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   normalize_fc2ef1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   normalize_fc2ef1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   normalize_fc2ef1();
 }
diff --git a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.wgsl b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.wgsl
index 5dfa161..b92ea5f 100644
--- a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = normalize(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   normalize_fc2ef1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   normalize_fc2ef1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   normalize_fc2ef1();
 }
diff --git a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl
index b46c8bc..ae2610c 100644
--- a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl
+++ b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = pack2x16float(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack2x16float_0e97b3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack2x16float_0e97b3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack2x16float_0e97b3();
 }
diff --git a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.wgsl b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.wgsl
index 6dfa69ad..714304f 100644
--- a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = pack2x16float(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack2x16float_0e97b3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack2x16float_0e97b3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack2x16float_0e97b3();
 }
diff --git a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl
index 859d77a..7d0aeb3 100644
--- a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl
+++ b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = pack2x16snorm(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack2x16snorm_6c169b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack2x16snorm_6c169b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack2x16snorm_6c169b();
 }
diff --git a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.wgsl b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.wgsl
index cbcc61d..9ccbc2f 100644
--- a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = pack2x16snorm(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack2x16snorm_6c169b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack2x16snorm_6c169b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack2x16snorm_6c169b();
 }
diff --git a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl
index 1c7cb38..022aaa6 100644
--- a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl
+++ b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = pack2x16unorm(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack2x16unorm_0f08e4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack2x16unorm_0f08e4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack2x16unorm_0f08e4();
 }
diff --git a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.wgsl b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.wgsl
index d731728..d523070 100644
--- a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = pack2x16unorm(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack2x16unorm_0f08e4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack2x16unorm_0f08e4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack2x16unorm_0f08e4();
 }
diff --git a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl
index f1d36e8..6495f5e 100644
--- a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl
+++ b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = pack4x8snorm(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack4x8snorm_4d22e7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack4x8snorm_4d22e7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack4x8snorm_4d22e7();
 }
diff --git a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.wgsl b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.wgsl
index 201c693..53657e0 100644
--- a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = pack4x8snorm(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack4x8snorm_4d22e7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack4x8snorm_4d22e7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack4x8snorm_4d22e7();
 }
diff --git a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl
index 8ccefca..d76e075 100644
--- a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl
+++ b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = pack4x8unorm(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack4x8unorm_95c456();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack4x8unorm_95c456();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack4x8unorm_95c456();
 }
diff --git a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.wgsl b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.wgsl
index f734559..55aedf3 100644
--- a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = pack4x8unorm(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pack4x8unorm_95c456();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pack4x8unorm_95c456();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pack4x8unorm_95c456();
 }
diff --git a/test/intrinsics/gen/pow/04a908.wgsl b/test/intrinsics/gen/pow/04a908.wgsl
index a0fb92e..cc17d35 100644
--- a/test/intrinsics/gen/pow/04a908.wgsl
+++ b/test/intrinsics/gen/pow/04a908.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = pow(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_04a908();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_04a908();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_04a908();
 }
diff --git a/test/intrinsics/gen/pow/04a908.wgsl.expected.wgsl b/test/intrinsics/gen/pow/04a908.wgsl.expected.wgsl
index 55b882d..395fe26 100644
--- a/test/intrinsics/gen/pow/04a908.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pow/04a908.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = pow(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_04a908();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_04a908();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_04a908();
 }
diff --git a/test/intrinsics/gen/pow/46e029.wgsl b/test/intrinsics/gen/pow/46e029.wgsl
index 87c4746..7366f03 100644
--- a/test/intrinsics/gen/pow/46e029.wgsl
+++ b/test/intrinsics/gen/pow/46e029.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = pow(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_46e029();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_46e029();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_46e029();
 }
diff --git a/test/intrinsics/gen/pow/46e029.wgsl.expected.wgsl b/test/intrinsics/gen/pow/46e029.wgsl.expected.wgsl
index 49a5573..1670720 100644
--- a/test/intrinsics/gen/pow/46e029.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pow/46e029.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = pow(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_46e029();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_46e029();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_46e029();
 }
diff --git a/test/intrinsics/gen/pow/4a46c9.wgsl b/test/intrinsics/gen/pow/4a46c9.wgsl
index c0addcd..c6e5af0 100644
--- a/test/intrinsics/gen/pow/4a46c9.wgsl
+++ b/test/intrinsics/gen/pow/4a46c9.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = pow(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_4a46c9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_4a46c9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_4a46c9();
 }
diff --git a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.wgsl b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.wgsl
index 8000f56..4a6f3f9 100644
--- a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = pow(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_4a46c9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_4a46c9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_4a46c9();
 }
diff --git a/test/intrinsics/gen/pow/e60ea5.wgsl b/test/intrinsics/gen/pow/e60ea5.wgsl
index 72ee0cf..e2080cb 100644
--- a/test/intrinsics/gen/pow/e60ea5.wgsl
+++ b/test/intrinsics/gen/pow/e60ea5.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = pow(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_e60ea5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_e60ea5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_e60ea5();
 }
diff --git a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.wgsl b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.wgsl
index 3885336..0c6432e 100644
--- a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = pow(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   pow_e60ea5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   pow_e60ea5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   pow_e60ea5();
 }
diff --git a/test/intrinsics/gen/radians/09b7fc.wgsl b/test/intrinsics/gen/radians/09b7fc.wgsl
index e3e70e6..e397d3a 100644
--- a/test/intrinsics/gen/radians/09b7fc.wgsl
+++ b/test/intrinsics/gen/radians/09b7fc.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = radians(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_09b7fc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_09b7fc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_09b7fc();
 }
diff --git a/test/intrinsics/gen/radians/09b7fc.wgsl.expected.wgsl b/test/intrinsics/gen/radians/09b7fc.wgsl.expected.wgsl
index 4b354c0..e8efa0e 100644
--- a/test/intrinsics/gen/radians/09b7fc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/radians/09b7fc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = radians(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_09b7fc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_09b7fc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_09b7fc();
 }
diff --git a/test/intrinsics/gen/radians/61687a.wgsl b/test/intrinsics/gen/radians/61687a.wgsl
index 81db7ee..9ff8560 100644
--- a/test/intrinsics/gen/radians/61687a.wgsl
+++ b/test/intrinsics/gen/radians/61687a.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = radians(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_61687a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_61687a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_61687a();
 }
diff --git a/test/intrinsics/gen/radians/61687a.wgsl.expected.wgsl b/test/intrinsics/gen/radians/61687a.wgsl.expected.wgsl
index 830d0d6..310425f 100644
--- a/test/intrinsics/gen/radians/61687a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/radians/61687a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = radians(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_61687a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_61687a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_61687a();
 }
diff --git a/test/intrinsics/gen/radians/6b0ff2.wgsl b/test/intrinsics/gen/radians/6b0ff2.wgsl
index fab9916..8ceaeb2 100644
--- a/test/intrinsics/gen/radians/6b0ff2.wgsl
+++ b/test/intrinsics/gen/radians/6b0ff2.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = radians(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_6b0ff2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_6b0ff2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_6b0ff2();
 }
diff --git a/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.wgsl b/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.wgsl
index 1c1ac6b..05a6fb5 100644
--- a/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = radians(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_6b0ff2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_6b0ff2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_6b0ff2();
 }
diff --git a/test/intrinsics/gen/radians/f96258.wgsl b/test/intrinsics/gen/radians/f96258.wgsl
index 4c48ae3..bca54a5 100644
--- a/test/intrinsics/gen/radians/f96258.wgsl
+++ b/test/intrinsics/gen/radians/f96258.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = radians(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_f96258();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_f96258();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_f96258();
 }
diff --git a/test/intrinsics/gen/radians/f96258.wgsl.expected.wgsl b/test/intrinsics/gen/radians/f96258.wgsl.expected.wgsl
index 9a14173..c38fe31 100644
--- a/test/intrinsics/gen/radians/f96258.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/radians/f96258.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = radians(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   radians_f96258();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   radians_f96258();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   radians_f96258();
 }
diff --git a/test/intrinsics/gen/reflect/05357e.wgsl b/test/intrinsics/gen/reflect/05357e.wgsl
index 928e3df..97aaac7 100644
--- a/test/intrinsics/gen/reflect/05357e.wgsl
+++ b/test/intrinsics/gen/reflect/05357e.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = reflect(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reflect_05357e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reflect_05357e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reflect_05357e();
 }
diff --git a/test/intrinsics/gen/reflect/05357e.wgsl.expected.wgsl b/test/intrinsics/gen/reflect/05357e.wgsl.expected.wgsl
index 5e4b47d..ba4f95a 100644
--- a/test/intrinsics/gen/reflect/05357e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reflect/05357e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = reflect(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reflect_05357e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reflect_05357e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reflect_05357e();
 }
diff --git a/test/intrinsics/gen/reflect/b61e10.wgsl b/test/intrinsics/gen/reflect/b61e10.wgsl
index 441e9a7..124022b 100644
--- a/test/intrinsics/gen/reflect/b61e10.wgsl
+++ b/test/intrinsics/gen/reflect/b61e10.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = reflect(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reflect_b61e10();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reflect_b61e10();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reflect_b61e10();
 }
diff --git a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.wgsl b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.wgsl
index 6cd6d58..330eead 100644
--- a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = reflect(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reflect_b61e10();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reflect_b61e10();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reflect_b61e10();
 }
diff --git a/test/intrinsics/gen/reflect/f47fdb.wgsl b/test/intrinsics/gen/reflect/f47fdb.wgsl
index ee08672..3048fe0 100644
--- a/test/intrinsics/gen/reflect/f47fdb.wgsl
+++ b/test/intrinsics/gen/reflect/f47fdb.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = reflect(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reflect_f47fdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reflect_f47fdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reflect_f47fdb();
 }
diff --git a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.wgsl b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.wgsl
index 916347c..d66212f 100644
--- a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = reflect(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reflect_f47fdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reflect_f47fdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reflect_f47fdb();
 }
diff --git a/test/intrinsics/gen/refract/7e02e6.wgsl b/test/intrinsics/gen/refract/7e02e6.wgsl
index 677b01b..ff46411 100644
--- a/test/intrinsics/gen/refract/7e02e6.wgsl
+++ b/test/intrinsics/gen/refract/7e02e6.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = refract(vec4<f32>(), vec4<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   refract_7e02e6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   refract_7e02e6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   refract_7e02e6();
 }
diff --git a/test/intrinsics/gen/refract/7e02e6.wgsl.expected.wgsl b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.wgsl
index f55545f..3950912 100644
--- a/test/intrinsics/gen/refract/7e02e6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = refract(vec4<f32>(), vec4<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   refract_7e02e6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   refract_7e02e6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   refract_7e02e6();
 }
diff --git a/test/intrinsics/gen/refract/cbc1d2.wgsl b/test/intrinsics/gen/refract/cbc1d2.wgsl
index 5ef26d7..40c0531 100644
--- a/test/intrinsics/gen/refract/cbc1d2.wgsl
+++ b/test/intrinsics/gen/refract/cbc1d2.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = refract(vec3<f32>(), vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   refract_cbc1d2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   refract_cbc1d2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   refract_cbc1d2();
 }
diff --git a/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.wgsl b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.wgsl
index d26c8d1..535c279 100644
--- a/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = refract(vec3<f32>(), vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   refract_cbc1d2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   refract_cbc1d2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   refract_cbc1d2();
 }
diff --git a/test/intrinsics/gen/refract/cd905f.wgsl b/test/intrinsics/gen/refract/cd905f.wgsl
index 4c38ddf..9c9e3fd 100644
--- a/test/intrinsics/gen/refract/cd905f.wgsl
+++ b/test/intrinsics/gen/refract/cd905f.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = refract(vec2<f32>(), vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   refract_cd905f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   refract_cd905f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   refract_cd905f();
 }
diff --git a/test/intrinsics/gen/refract/cd905f.wgsl.expected.wgsl b/test/intrinsics/gen/refract/cd905f.wgsl.expected.wgsl
index de43d99..485ab60 100644
--- a/test/intrinsics/gen/refract/cd905f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/refract/cd905f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = refract(vec2<f32>(), vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   refract_cd905f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   refract_cd905f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   refract_cd905f();
 }
diff --git a/test/intrinsics/gen/reverseBits/222177.wgsl b/test/intrinsics/gen/reverseBits/222177.wgsl
index ac1aef1..bdbba4a 100644
--- a/test/intrinsics/gen/reverseBits/222177.wgsl
+++ b/test/intrinsics/gen/reverseBits/222177.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = reverseBits(vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_222177();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_222177();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_222177();
 }
diff --git a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.wgsl
index 5e8b89a..cd37769 100644
--- a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = reverseBits(vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_222177();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_222177();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_222177();
 }
diff --git a/test/intrinsics/gen/reverseBits/35fea9.wgsl b/test/intrinsics/gen/reverseBits/35fea9.wgsl
index e8c79b1..319f6d2 100644
--- a/test/intrinsics/gen/reverseBits/35fea9.wgsl
+++ b/test/intrinsics/gen/reverseBits/35fea9.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = reverseBits(vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_35fea9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_35fea9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_35fea9();
 }
diff --git a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.wgsl
index 6bcd42b..6fea80d 100644
--- a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = reverseBits(vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_35fea9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_35fea9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_35fea9();
 }
diff --git a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl
index f2fea01..09ab61f 100644
--- a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl
+++ b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = reverseBits(vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_4dbd6f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_4dbd6f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_4dbd6f();
 }
diff --git a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.wgsl
index a07bf4d..2e6d0b2 100644
--- a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = reverseBits(vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_4dbd6f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_4dbd6f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_4dbd6f();
 }
diff --git a/test/intrinsics/gen/reverseBits/7c4269.wgsl b/test/intrinsics/gen/reverseBits/7c4269.wgsl
index 423e9d9..6be3409 100644
--- a/test/intrinsics/gen/reverseBits/7c4269.wgsl
+++ b/test/intrinsics/gen/reverseBits/7c4269.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = reverseBits(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_7c4269();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_7c4269();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_7c4269();
 }
diff --git a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.wgsl
index 8bf4d05..17f9950 100644
--- a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = reverseBits(1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_7c4269();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_7c4269();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_7c4269();
 }
diff --git a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl
index e973fe2..3559904 100644
--- a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl
+++ b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = reverseBits(vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_a6ccd4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_a6ccd4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_a6ccd4();
 }
diff --git a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.wgsl
index abcdac1..713d9c7 100644
--- a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = reverseBits(vec3<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_a6ccd4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_a6ccd4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_a6ccd4();
 }
diff --git a/test/intrinsics/gen/reverseBits/c21bc1.wgsl b/test/intrinsics/gen/reverseBits/c21bc1.wgsl
index 36367af..985e64a 100644
--- a/test/intrinsics/gen/reverseBits/c21bc1.wgsl
+++ b/test/intrinsics/gen/reverseBits/c21bc1.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = reverseBits(vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_c21bc1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_c21bc1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_c21bc1();
 }
diff --git a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.wgsl
index 971a3b0..6ad70ae 100644
--- a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = reverseBits(vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_c21bc1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_c21bc1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_c21bc1();
 }
diff --git a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl
index 406684b..d186157 100644
--- a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl
+++ b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = reverseBits(vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_e1f4c1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_e1f4c1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_e1f4c1();
 }
diff --git a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.wgsl
index 6860421..dc01269 100644
--- a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = reverseBits(vec2<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_e1f4c1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_e1f4c1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_e1f4c1();
 }
diff --git a/test/intrinsics/gen/reverseBits/e31adf.wgsl b/test/intrinsics/gen/reverseBits/e31adf.wgsl
index 39e5639..c32c738 100644
--- a/test/intrinsics/gen/reverseBits/e31adf.wgsl
+++ b/test/intrinsics/gen/reverseBits/e31adf.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = reverseBits(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_e31adf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_e31adf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_e31adf();
 }
diff --git a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.wgsl b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.wgsl
index 2f2c5e8..d99e7a5 100644
--- a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = reverseBits(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   reverseBits_e31adf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   reverseBits_e31adf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   reverseBits_e31adf();
 }
diff --git a/test/intrinsics/gen/round/106c0b.wgsl b/test/intrinsics/gen/round/106c0b.wgsl
index 0bcea29..52ebd56 100644
--- a/test/intrinsics/gen/round/106c0b.wgsl
+++ b/test/intrinsics/gen/round/106c0b.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = round(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_106c0b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_106c0b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_106c0b();
 }
diff --git a/test/intrinsics/gen/round/106c0b.wgsl.expected.wgsl b/test/intrinsics/gen/round/106c0b.wgsl.expected.wgsl
index de57173..338cddf 100644
--- a/test/intrinsics/gen/round/106c0b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/round/106c0b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = round(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_106c0b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_106c0b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_106c0b();
 }
diff --git a/test/intrinsics/gen/round/1c7897.wgsl b/test/intrinsics/gen/round/1c7897.wgsl
index ff05513..c0f13ae 100644
--- a/test/intrinsics/gen/round/1c7897.wgsl
+++ b/test/intrinsics/gen/round/1c7897.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = round(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_1c7897();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_1c7897();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_1c7897();
 }
diff --git a/test/intrinsics/gen/round/1c7897.wgsl.expected.wgsl b/test/intrinsics/gen/round/1c7897.wgsl.expected.wgsl
index 4abe9aa..ac2350e 100644
--- a/test/intrinsics/gen/round/1c7897.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/round/1c7897.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = round(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_1c7897();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_1c7897();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_1c7897();
 }
diff --git a/test/intrinsics/gen/round/52c84d.wgsl b/test/intrinsics/gen/round/52c84d.wgsl
index 34d2910..385bb5e 100644
--- a/test/intrinsics/gen/round/52c84d.wgsl
+++ b/test/intrinsics/gen/round/52c84d.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = round(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_52c84d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_52c84d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_52c84d();
 }
diff --git a/test/intrinsics/gen/round/52c84d.wgsl.expected.wgsl b/test/intrinsics/gen/round/52c84d.wgsl.expected.wgsl
index 5d89ce6..9877c2d 100644
--- a/test/intrinsics/gen/round/52c84d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/round/52c84d.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = round(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_52c84d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_52c84d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_52c84d();
 }
diff --git a/test/intrinsics/gen/round/9edc38.wgsl b/test/intrinsics/gen/round/9edc38.wgsl
index 01f9211..e4fd176 100644
--- a/test/intrinsics/gen/round/9edc38.wgsl
+++ b/test/intrinsics/gen/round/9edc38.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = round(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_9edc38();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_9edc38();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_9edc38();
 }
diff --git a/test/intrinsics/gen/round/9edc38.wgsl.expected.wgsl b/test/intrinsics/gen/round/9edc38.wgsl.expected.wgsl
index 40588ac..9753e04 100644
--- a/test/intrinsics/gen/round/9edc38.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/round/9edc38.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = round(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   round_9edc38();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   round_9edc38();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   round_9edc38();
 }
diff --git a/test/intrinsics/gen/select/00b848.wgsl b/test/intrinsics/gen/select/00b848.wgsl
index bf6993f..a1f4834 100644
--- a/test/intrinsics/gen/select/00b848.wgsl
+++ b/test/intrinsics/gen/select/00b848.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = select(vec2<i32>(), vec2<i32>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_00b848();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_00b848();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_00b848();
 }
diff --git a/test/intrinsics/gen/select/00b848.wgsl.expected.wgsl b/test/intrinsics/gen/select/00b848.wgsl.expected.wgsl
index 9a72d2d..bf45b90 100644
--- a/test/intrinsics/gen/select/00b848.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = select(vec2<i32>(), vec2<i32>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_00b848();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_00b848();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_00b848();
 }
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl b/test/intrinsics/gen/select/01e2cd.wgsl
index ed51d33..c8e0408 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = select(vec3<i32>(), vec3<i32>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_01e2cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_01e2cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_01e2cd();
 }
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.wgsl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.wgsl
index f52df12..7e9d06f 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = select(vec3<i32>(), vec3<i32>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_01e2cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_01e2cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_01e2cd();
 }
diff --git a/test/intrinsics/gen/select/087ea4.wgsl b/test/intrinsics/gen/select/087ea4.wgsl
index a89cf61..f8f7924 100644
--- a/test/intrinsics/gen/select/087ea4.wgsl
+++ b/test/intrinsics/gen/select/087ea4.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = select(vec4<u32>(), vec4<u32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_087ea4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_087ea4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_087ea4();
 }
diff --git a/test/intrinsics/gen/select/087ea4.wgsl.expected.wgsl b/test/intrinsics/gen/select/087ea4.wgsl.expected.wgsl
index da2621f..6258a15 100644
--- a/test/intrinsics/gen/select/087ea4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/087ea4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = select(vec4<u32>(), vec4<u32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_087ea4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_087ea4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_087ea4();
 }
diff --git a/test/intrinsics/gen/select/1e960b.wgsl b/test/intrinsics/gen/select/1e960b.wgsl
index 7d40c59..92c0df6 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl
+++ b/test/intrinsics/gen/select/1e960b.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = select(vec2<u32>(), vec2<u32>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_1e960b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_1e960b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_1e960b();
 }
diff --git a/test/intrinsics/gen/select/1e960b.wgsl.expected.wgsl b/test/intrinsics/gen/select/1e960b.wgsl.expected.wgsl
index 2fc1050..4f78e59 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = select(vec2<u32>(), vec2<u32>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_1e960b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_1e960b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_1e960b();
 }
diff --git a/test/intrinsics/gen/select/266aff.wgsl b/test/intrinsics/gen/select/266aff.wgsl
index cd55f3c..6faee8a 100644
--- a/test/intrinsics/gen/select/266aff.wgsl
+++ b/test/intrinsics/gen/select/266aff.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = select(vec2<f32>(), vec2<f32>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_266aff();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_266aff();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_266aff();
 }
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.wgsl b/test/intrinsics/gen/select/266aff.wgsl.expected.wgsl
index 6c5dab6..522a10f 100644
--- a/test/intrinsics/gen/select/266aff.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = select(vec2<f32>(), vec2<f32>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_266aff();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_266aff();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_266aff();
 }
diff --git a/test/intrinsics/gen/select/28a27e.wgsl b/test/intrinsics/gen/select/28a27e.wgsl
index b58c5ca..cc515a9 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl
+++ b/test/intrinsics/gen/select/28a27e.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = select(vec3<u32>(), vec3<u32>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_28a27e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_28a27e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_28a27e();
 }
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.wgsl b/test/intrinsics/gen/select/28a27e.wgsl.expected.wgsl
index 42fb13a..cbc4bcf 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = select(vec3<u32>(), vec3<u32>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_28a27e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_28a27e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_28a27e();
 }
diff --git a/test/intrinsics/gen/select/3c25ce.wgsl b/test/intrinsics/gen/select/3c25ce.wgsl
index 5a2afbd..85d68b1 100644
--- a/test/intrinsics/gen/select/3c25ce.wgsl
+++ b/test/intrinsics/gen/select/3c25ce.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<bool> = select(vec3<bool>(), vec3<bool>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_3c25ce();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_3c25ce();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_3c25ce();
 }
diff --git a/test/intrinsics/gen/select/3c25ce.wgsl.expected.wgsl b/test/intrinsics/gen/select/3c25ce.wgsl.expected.wgsl
index cd6c508..48963b4 100644
--- a/test/intrinsics/gen/select/3c25ce.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/3c25ce.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<bool> = select(vec3<bool>(), vec3<bool>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_3c25ce();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_3c25ce();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_3c25ce();
 }
diff --git a/test/intrinsics/gen/select/416e14.wgsl b/test/intrinsics/gen/select/416e14.wgsl
index 6427738..c69cd17 100644
--- a/test/intrinsics/gen/select/416e14.wgsl
+++ b/test/intrinsics/gen/select/416e14.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = select(1.0, 1.0, bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_416e14();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_416e14();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_416e14();
 }
diff --git a/test/intrinsics/gen/select/416e14.wgsl.expected.wgsl b/test/intrinsics/gen/select/416e14.wgsl.expected.wgsl
index 847eb7c..bfa5d2e 100644
--- a/test/intrinsics/gen/select/416e14.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/416e14.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = select(1.0, 1.0, bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_416e14();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_416e14();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_416e14();
 }
diff --git a/test/intrinsics/gen/select/51b047.wgsl b/test/intrinsics/gen/select/51b047.wgsl
index 64fd8ed..f774d3f 100644
--- a/test/intrinsics/gen/select/51b047.wgsl
+++ b/test/intrinsics/gen/select/51b047.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<u32> = select(vec2<u32>(), vec2<u32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_51b047();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_51b047();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_51b047();
 }
diff --git a/test/intrinsics/gen/select/51b047.wgsl.expected.wgsl b/test/intrinsics/gen/select/51b047.wgsl.expected.wgsl
index 8cb5525..93097d9 100644
--- a/test/intrinsics/gen/select/51b047.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/51b047.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<u32> = select(vec2<u32>(), vec2<u32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_51b047();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_51b047();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_51b047();
 }
diff --git a/test/intrinsics/gen/select/713567.wgsl b/test/intrinsics/gen/select/713567.wgsl
index 2d4d541..9dad142 100644
--- a/test/intrinsics/gen/select/713567.wgsl
+++ b/test/intrinsics/gen/select/713567.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = select(vec4<f32>(), vec4<f32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_713567();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_713567();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_713567();
 }
diff --git a/test/intrinsics/gen/select/713567.wgsl.expected.wgsl b/test/intrinsics/gen/select/713567.wgsl.expected.wgsl
index 8624950..d885a74 100644
--- a/test/intrinsics/gen/select/713567.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/713567.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = select(vec4<f32>(), vec4<f32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_713567();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_713567();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_713567();
 }
diff --git a/test/intrinsics/gen/select/78be5f.wgsl b/test/intrinsics/gen/select/78be5f.wgsl
index 940450a..363cb61 100644
--- a/test/intrinsics/gen/select/78be5f.wgsl
+++ b/test/intrinsics/gen/select/78be5f.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = select(vec3<f32>(), vec3<f32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_78be5f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_78be5f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_78be5f();
 }
diff --git a/test/intrinsics/gen/select/78be5f.wgsl.expected.wgsl b/test/intrinsics/gen/select/78be5f.wgsl.expected.wgsl
index 9f76d0f..7c77d66 100644
--- a/test/intrinsics/gen/select/78be5f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/78be5f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = select(vec3<f32>(), vec3<f32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_78be5f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_78be5f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_78be5f();
 }
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl b/test/intrinsics/gen/select/80a9a9.wgsl
index 2d8a8f9..970d4b0 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<bool> = select(vec3<bool>(), vec3<bool>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_80a9a9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_80a9a9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_80a9a9();
 }
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl.expected.wgsl b/test/intrinsics/gen/select/80a9a9.wgsl.expected.wgsl
index bafde41..1f2b1fd 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<bool> = select(vec3<bool>(), vec3<bool>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_80a9a9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_80a9a9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_80a9a9();
 }
diff --git a/test/intrinsics/gen/select/8fa62c.wgsl b/test/intrinsics/gen/select/8fa62c.wgsl
index edaca3f..6fd149a 100644
--- a/test/intrinsics/gen/select/8fa62c.wgsl
+++ b/test/intrinsics/gen/select/8fa62c.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<i32> = select(vec3<i32>(), vec3<i32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_8fa62c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_8fa62c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_8fa62c();
 }
diff --git a/test/intrinsics/gen/select/8fa62c.wgsl.expected.wgsl b/test/intrinsics/gen/select/8fa62c.wgsl.expected.wgsl
index 7ce550f..431824e 100644
--- a/test/intrinsics/gen/select/8fa62c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/8fa62c.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<i32> = select(vec3<i32>(), vec3<i32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_8fa62c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_8fa62c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_8fa62c();
 }
diff --git a/test/intrinsics/gen/select/99f883.wgsl b/test/intrinsics/gen/select/99f883.wgsl
index 5ddccad..25c5a25 100644
--- a/test/intrinsics/gen/select/99f883.wgsl
+++ b/test/intrinsics/gen/select/99f883.wgsl
@@ -28,18 +28,18 @@
   var res: u32 = select(1u, 1u, bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_99f883();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_99f883();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_99f883();
 }
diff --git a/test/intrinsics/gen/select/99f883.wgsl.expected.wgsl b/test/intrinsics/gen/select/99f883.wgsl.expected.wgsl
index 17d5598..0ceacc2 100644
--- a/test/intrinsics/gen/select/99f883.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/99f883.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : u32 = select(1u, 1u, bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_99f883();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_99f883();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_99f883();
 }
diff --git a/test/intrinsics/gen/select/a2860e.wgsl b/test/intrinsics/gen/select/a2860e.wgsl
index 289e00e..6b3b0b2 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl
+++ b/test/intrinsics/gen/select/a2860e.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = select(vec4<i32>(), vec4<i32>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_a2860e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_a2860e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_a2860e();
 }
diff --git a/test/intrinsics/gen/select/a2860e.wgsl.expected.wgsl b/test/intrinsics/gen/select/a2860e.wgsl.expected.wgsl
index d52472c..0fd2eb4 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = select(vec4<i32>(), vec4<i32>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_a2860e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_a2860e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_a2860e();
 }
diff --git a/test/intrinsics/gen/select/ab069f.wgsl b/test/intrinsics/gen/select/ab069f.wgsl
index 3c2265e..a55fa79 100644
--- a/test/intrinsics/gen/select/ab069f.wgsl
+++ b/test/intrinsics/gen/select/ab069f.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<i32> = select(vec4<i32>(), vec4<i32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_ab069f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_ab069f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_ab069f();
 }
diff --git a/test/intrinsics/gen/select/ab069f.wgsl.expected.wgsl b/test/intrinsics/gen/select/ab069f.wgsl.expected.wgsl
index b64daa0..ea18846 100644
--- a/test/intrinsics/gen/select/ab069f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/ab069f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<i32> = select(vec4<i32>(), vec4<i32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_ab069f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_ab069f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_ab069f();
 }
diff --git a/test/intrinsics/gen/select/b04721.wgsl b/test/intrinsics/gen/select/b04721.wgsl
index 13898cf..1de6739 100644
--- a/test/intrinsics/gen/select/b04721.wgsl
+++ b/test/intrinsics/gen/select/b04721.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<u32> = select(vec3<u32>(), vec3<u32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_b04721();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_b04721();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_b04721();
 }
diff --git a/test/intrinsics/gen/select/b04721.wgsl.expected.wgsl b/test/intrinsics/gen/select/b04721.wgsl.expected.wgsl
index e92cb25..86befd9 100644
--- a/test/intrinsics/gen/select/b04721.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/b04721.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<u32> = select(vec3<u32>(), vec3<u32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_b04721();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_b04721();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_b04721();
 }
diff --git a/test/intrinsics/gen/select/bb447f.wgsl b/test/intrinsics/gen/select/bb447f.wgsl
index 7bdc0c7..f15929a 100644
--- a/test/intrinsics/gen/select/bb447f.wgsl
+++ b/test/intrinsics/gen/select/bb447f.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<i32> = select(vec2<i32>(), vec2<i32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_bb447f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_bb447f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_bb447f();
 }
diff --git a/test/intrinsics/gen/select/bb447f.wgsl.expected.wgsl b/test/intrinsics/gen/select/bb447f.wgsl.expected.wgsl
index dd11e92..2ea72e7 100644
--- a/test/intrinsics/gen/select/bb447f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/bb447f.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<i32> = select(vec2<i32>(), vec2<i32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_bb447f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_bb447f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_bb447f();
 }
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl b/test/intrinsics/gen/select/bb8aae.wgsl
index 5734859..786f619 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = select(vec4<f32>(), vec4<f32>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_bb8aae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_bb8aae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_bb8aae();
 }
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl.expected.wgsl b/test/intrinsics/gen/select/bb8aae.wgsl.expected.wgsl
index dca5783..f64a61b 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = select(vec4<f32>(), vec4<f32>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_bb8aae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_bb8aae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_bb8aae();
 }
diff --git a/test/intrinsics/gen/select/bf3d29.wgsl b/test/intrinsics/gen/select/bf3d29.wgsl
index ac24039..db8e855 100644
--- a/test/intrinsics/gen/select/bf3d29.wgsl
+++ b/test/intrinsics/gen/select/bf3d29.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = select(vec2<f32>(), vec2<f32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_bf3d29();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_bf3d29();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_bf3d29();
 }
diff --git a/test/intrinsics/gen/select/bf3d29.wgsl.expected.wgsl b/test/intrinsics/gen/select/bf3d29.wgsl.expected.wgsl
index 1223b7b..87b2f80 100644
--- a/test/intrinsics/gen/select/bf3d29.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/bf3d29.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = select(vec2<f32>(), vec2<f32>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_bf3d29();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_bf3d29();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_bf3d29();
 }
diff --git a/test/intrinsics/gen/select/c31f9e.wgsl b/test/intrinsics/gen/select/c31f9e.wgsl
index 5694d13..3f04796 100644
--- a/test/intrinsics/gen/select/c31f9e.wgsl
+++ b/test/intrinsics/gen/select/c31f9e.wgsl
@@ -28,18 +28,18 @@
   var res: bool = select(bool(), bool(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_c31f9e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_c31f9e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_c31f9e();
 }
diff --git a/test/intrinsics/gen/select/c31f9e.wgsl.expected.wgsl b/test/intrinsics/gen/select/c31f9e.wgsl.expected.wgsl
index 289a904..21acae6 100644
--- a/test/intrinsics/gen/select/c31f9e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/c31f9e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : bool = select(bool(), bool(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_c31f9e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_c31f9e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_c31f9e();
 }
diff --git a/test/intrinsics/gen/select/c41bd1.wgsl b/test/intrinsics/gen/select/c41bd1.wgsl
index cdb49ce..a4a0143 100644
--- a/test/intrinsics/gen/select/c41bd1.wgsl
+++ b/test/intrinsics/gen/select/c41bd1.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<bool> = select(vec4<bool>(), vec4<bool>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_c41bd1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_c41bd1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_c41bd1();
 }
diff --git a/test/intrinsics/gen/select/c41bd1.wgsl.expected.wgsl b/test/intrinsics/gen/select/c41bd1.wgsl.expected.wgsl
index c0fffc7..a314f0c 100644
--- a/test/intrinsics/gen/select/c41bd1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/c41bd1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<bool> = select(vec4<bool>(), vec4<bool>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_c41bd1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_c41bd1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_c41bd1();
 }
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl b/test/intrinsics/gen/select/c4a4ef.wgsl
index f78392b..5826ca0 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<u32> = select(vec4<u32>(), vec4<u32>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_c4a4ef();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_c4a4ef();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_c4a4ef();
 }
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.wgsl b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.wgsl
index 13731b9..adbcc5d 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<u32> = select(vec4<u32>(), vec4<u32>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_c4a4ef();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_c4a4ef();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_c4a4ef();
 }
diff --git a/test/intrinsics/gen/select/cb9301.wgsl b/test/intrinsics/gen/select/cb9301.wgsl
index 397cca1..1de0ad1 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl
+++ b/test/intrinsics/gen/select/cb9301.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<bool> = select(vec2<bool>(), vec2<bool>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_cb9301();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_cb9301();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_cb9301();
 }
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.wgsl b/test/intrinsics/gen/select/cb9301.wgsl.expected.wgsl
index cbad268..7c85dad 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<bool> = select(vec2<bool>(), vec2<bool>(), vec2<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_cb9301();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_cb9301();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_cb9301();
 }
diff --git a/test/intrinsics/gen/select/e3e028.wgsl b/test/intrinsics/gen/select/e3e028.wgsl
index 2031d9e..7d28666 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl
+++ b/test/intrinsics/gen/select/e3e028.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<bool> = select(vec4<bool>(), vec4<bool>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_e3e028();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_e3e028();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_e3e028();
 }
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.wgsl b/test/intrinsics/gen/select/e3e028.wgsl.expected.wgsl
index 200e27d..2794266 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<bool> = select(vec4<bool>(), vec4<bool>(), vec4<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_e3e028();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_e3e028();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_e3e028();
 }
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl b/test/intrinsics/gen/select/ebfea2.wgsl
index 8487ca2..bd572c5 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = select(vec3<f32>(), vec3<f32>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_ebfea2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_ebfea2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_ebfea2();
 }
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.wgsl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.wgsl
index d7e6f63..c181585 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = select(vec3<f32>(), vec3<f32>(), vec3<bool>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_ebfea2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_ebfea2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_ebfea2();
 }
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl b/test/intrinsics/gen/select/ed8a15.wgsl
index a898387..df1f6ad 100644
--- a/test/intrinsics/gen/select/ed8a15.wgsl
+++ b/test/intrinsics/gen/select/ed8a15.wgsl
@@ -28,18 +28,18 @@
   var res: i32 = select(1, 1, bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_ed8a15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_ed8a15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_ed8a15();
 }
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl.expected.wgsl b/test/intrinsics/gen/select/ed8a15.wgsl.expected.wgsl
index 7f607be..ca4b96e 100644
--- a/test/intrinsics/gen/select/ed8a15.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/ed8a15.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : i32 = select(1, 1, bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_ed8a15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_ed8a15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_ed8a15();
 }
diff --git a/test/intrinsics/gen/select/fb7e53.wgsl b/test/intrinsics/gen/select/fb7e53.wgsl
index a213dbd..92d50f3 100644
--- a/test/intrinsics/gen/select/fb7e53.wgsl
+++ b/test/intrinsics/gen/select/fb7e53.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<bool> = select(vec2<bool>(), vec2<bool>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_fb7e53();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_fb7e53();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_fb7e53();
 }
diff --git a/test/intrinsics/gen/select/fb7e53.wgsl.expected.wgsl b/test/intrinsics/gen/select/fb7e53.wgsl.expected.wgsl
index e08a15f..6c6a287 100644
--- a/test/intrinsics/gen/select/fb7e53.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/select/fb7e53.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<bool> = select(vec2<bool>(), vec2<bool>(), bool());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   select_fb7e53();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   select_fb7e53();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   select_fb7e53();
 }
diff --git a/test/intrinsics/gen/sign/159665.wgsl b/test/intrinsics/gen/sign/159665.wgsl
index 31ef21d..a3d87a4e 100644
--- a/test/intrinsics/gen/sign/159665.wgsl
+++ b/test/intrinsics/gen/sign/159665.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = sign(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_159665();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_159665();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_159665();
 }
diff --git a/test/intrinsics/gen/sign/159665.wgsl.expected.wgsl b/test/intrinsics/gen/sign/159665.wgsl.expected.wgsl
index fe38cd6..b66072b 100644
--- a/test/intrinsics/gen/sign/159665.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sign/159665.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = sign(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_159665();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_159665();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_159665();
 }
diff --git a/test/intrinsics/gen/sign/b8f634.wgsl b/test/intrinsics/gen/sign/b8f634.wgsl
index d16ad92..c8ced09 100644
--- a/test/intrinsics/gen/sign/b8f634.wgsl
+++ b/test/intrinsics/gen/sign/b8f634.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = sign(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_b8f634();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_b8f634();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_b8f634();
 }
diff --git a/test/intrinsics/gen/sign/b8f634.wgsl.expected.wgsl b/test/intrinsics/gen/sign/b8f634.wgsl.expected.wgsl
index fb4f9f7..c9238d2 100644
--- a/test/intrinsics/gen/sign/b8f634.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sign/b8f634.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = sign(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_b8f634();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_b8f634();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_b8f634();
 }
diff --git a/test/intrinsics/gen/sign/d065d8.wgsl b/test/intrinsics/gen/sign/d065d8.wgsl
index 548b2a3..98d6b5e 100644
--- a/test/intrinsics/gen/sign/d065d8.wgsl
+++ b/test/intrinsics/gen/sign/d065d8.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = sign(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_d065d8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_d065d8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_d065d8();
 }
diff --git a/test/intrinsics/gen/sign/d065d8.wgsl.expected.wgsl b/test/intrinsics/gen/sign/d065d8.wgsl.expected.wgsl
index 7d4de19..870041f 100644
--- a/test/intrinsics/gen/sign/d065d8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sign/d065d8.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = sign(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_d065d8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_d065d8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_d065d8();
 }
diff --git a/test/intrinsics/gen/sign/dd790e.wgsl b/test/intrinsics/gen/sign/dd790e.wgsl
index 57e5b92..7765ea3 100644
--- a/test/intrinsics/gen/sign/dd790e.wgsl
+++ b/test/intrinsics/gen/sign/dd790e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = sign(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_dd790e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_dd790e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_dd790e();
 }
diff --git a/test/intrinsics/gen/sign/dd790e.wgsl.expected.wgsl b/test/intrinsics/gen/sign/dd790e.wgsl.expected.wgsl
index 9faa91b..d987517 100644
--- a/test/intrinsics/gen/sign/dd790e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sign/dd790e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = sign(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sign_dd790e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sign_dd790e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sign_dd790e();
 }
diff --git a/test/intrinsics/gen/sin/01f241.wgsl b/test/intrinsics/gen/sin/01f241.wgsl
index 6b385b3..58c1794 100644
--- a/test/intrinsics/gen/sin/01f241.wgsl
+++ b/test/intrinsics/gen/sin/01f241.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = sin(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_01f241();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_01f241();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_01f241();
 }
diff --git a/test/intrinsics/gen/sin/01f241.wgsl.expected.wgsl b/test/intrinsics/gen/sin/01f241.wgsl.expected.wgsl
index 6e7b72e..8188006 100644
--- a/test/intrinsics/gen/sin/01f241.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sin/01f241.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = sin(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_01f241();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_01f241();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_01f241();
 }
diff --git a/test/intrinsics/gen/sin/4e3979.wgsl b/test/intrinsics/gen/sin/4e3979.wgsl
index 4b616c7..ae447d2 100644
--- a/test/intrinsics/gen/sin/4e3979.wgsl
+++ b/test/intrinsics/gen/sin/4e3979.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = sin(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_4e3979();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_4e3979();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_4e3979();
 }
diff --git a/test/intrinsics/gen/sin/4e3979.wgsl.expected.wgsl b/test/intrinsics/gen/sin/4e3979.wgsl.expected.wgsl
index 1ec3ddd..6d03778 100644
--- a/test/intrinsics/gen/sin/4e3979.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sin/4e3979.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = sin(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_4e3979();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_4e3979();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_4e3979();
 }
diff --git a/test/intrinsics/gen/sin/b78c91.wgsl b/test/intrinsics/gen/sin/b78c91.wgsl
index 977b1c8..d8ecd40 100644
--- a/test/intrinsics/gen/sin/b78c91.wgsl
+++ b/test/intrinsics/gen/sin/b78c91.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = sin(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_b78c91();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_b78c91();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_b78c91();
 }
diff --git a/test/intrinsics/gen/sin/b78c91.wgsl.expected.wgsl b/test/intrinsics/gen/sin/b78c91.wgsl.expected.wgsl
index f3532b1..e4a2d42 100644
--- a/test/intrinsics/gen/sin/b78c91.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sin/b78c91.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = sin(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_b78c91();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_b78c91();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_b78c91();
 }
diff --git a/test/intrinsics/gen/sin/fc8bc4.wgsl b/test/intrinsics/gen/sin/fc8bc4.wgsl
index 0c81e50..b828689 100644
--- a/test/intrinsics/gen/sin/fc8bc4.wgsl
+++ b/test/intrinsics/gen/sin/fc8bc4.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = sin(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_fc8bc4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_fc8bc4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_fc8bc4();
 }
diff --git a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.wgsl b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.wgsl
index fbe00f8..30e0918 100644
--- a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = sin(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sin_fc8bc4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sin_fc8bc4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sin_fc8bc4();
 }
diff --git a/test/intrinsics/gen/sinh/445e33.wgsl b/test/intrinsics/gen/sinh/445e33.wgsl
index d3e9479..2bb1e20 100644
--- a/test/intrinsics/gen/sinh/445e33.wgsl
+++ b/test/intrinsics/gen/sinh/445e33.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = sinh(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_445e33();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_445e33();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_445e33();
 }
diff --git a/test/intrinsics/gen/sinh/445e33.wgsl.expected.wgsl b/test/intrinsics/gen/sinh/445e33.wgsl.expected.wgsl
index 9f27e00..4eac92e 100644
--- a/test/intrinsics/gen/sinh/445e33.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sinh/445e33.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = sinh(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_445e33();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_445e33();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_445e33();
 }
diff --git a/test/intrinsics/gen/sinh/7bb598.wgsl b/test/intrinsics/gen/sinh/7bb598.wgsl
index 112d966..872b87b 100644
--- a/test/intrinsics/gen/sinh/7bb598.wgsl
+++ b/test/intrinsics/gen/sinh/7bb598.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = sinh(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_7bb598();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_7bb598();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_7bb598();
 }
diff --git a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.wgsl b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.wgsl
index c9037e9..8df3fa0 100644
--- a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = sinh(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_7bb598();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_7bb598();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_7bb598();
 }
diff --git a/test/intrinsics/gen/sinh/b9860e.wgsl b/test/intrinsics/gen/sinh/b9860e.wgsl
index 738b4b0..3039b48 100644
--- a/test/intrinsics/gen/sinh/b9860e.wgsl
+++ b/test/intrinsics/gen/sinh/b9860e.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = sinh(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_b9860e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_b9860e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_b9860e();
 }
diff --git a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.wgsl b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.wgsl
index 189d1a8..b0698d0 100644
--- a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = sinh(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_b9860e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_b9860e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_b9860e();
 }
diff --git a/test/intrinsics/gen/sinh/c9a5eb.wgsl b/test/intrinsics/gen/sinh/c9a5eb.wgsl
index 59a9e38..9c79e98 100644
--- a/test/intrinsics/gen/sinh/c9a5eb.wgsl
+++ b/test/intrinsics/gen/sinh/c9a5eb.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = sinh(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_c9a5eb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_c9a5eb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_c9a5eb();
 }
diff --git a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.wgsl b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.wgsl
index ccbf252..642d72c 100644
--- a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = sinh(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sinh_c9a5eb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sinh_c9a5eb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sinh_c9a5eb();
 }
diff --git a/test/intrinsics/gen/smoothStep/5f615b.wgsl b/test/intrinsics/gen/smoothStep/5f615b.wgsl
index d4ba632..4b1a4ab 100644
--- a/test/intrinsics/gen/smoothStep/5f615b.wgsl
+++ b/test/intrinsics/gen/smoothStep/5f615b.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = smoothStep(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_5f615b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_5f615b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_5f615b();
 }
diff --git a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.wgsl b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.wgsl
index 62fe376..55a7561 100644
--- a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = smoothStep(vec4<f32>(), vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_5f615b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_5f615b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_5f615b();
 }
diff --git a/test/intrinsics/gen/smoothStep/658be3.wgsl b/test/intrinsics/gen/smoothStep/658be3.wgsl
index 11d3971..8e39364 100644
--- a/test/intrinsics/gen/smoothStep/658be3.wgsl
+++ b/test/intrinsics/gen/smoothStep/658be3.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = smoothStep(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_658be3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_658be3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_658be3();
 }
diff --git a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.wgsl b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.wgsl
index 2d99443..d81b745 100644
--- a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = smoothStep(vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_658be3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_658be3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_658be3();
 }
diff --git a/test/intrinsics/gen/smoothStep/c11eef.wgsl b/test/intrinsics/gen/smoothStep/c11eef.wgsl
index 9d88a67..7839f09 100644
--- a/test/intrinsics/gen/smoothStep/c11eef.wgsl
+++ b/test/intrinsics/gen/smoothStep/c11eef.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = smoothStep(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_c11eef();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_c11eef();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_c11eef();
 }
diff --git a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.wgsl b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.wgsl
index 54a6fb7..7b34ffb 100644
--- a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = smoothStep(vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_c11eef();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_c11eef();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_c11eef();
 }
diff --git a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl
index a823893..5c6c8c2 100644
--- a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl
+++ b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = smoothStep(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_cb0bfb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_cb0bfb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_cb0bfb();
 }
diff --git a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.wgsl b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.wgsl
index dd78c16..6b8ab78 100644
--- a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = smoothStep(1.0, 1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   smoothStep_cb0bfb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   smoothStep_cb0bfb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   smoothStep_cb0bfb();
 }
diff --git a/test/intrinsics/gen/sqrt/20c74e.wgsl b/test/intrinsics/gen/sqrt/20c74e.wgsl
index 8b85622..b954397 100644
--- a/test/intrinsics/gen/sqrt/20c74e.wgsl
+++ b/test/intrinsics/gen/sqrt/20c74e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = sqrt(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_20c74e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_20c74e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_20c74e();
 }
diff --git a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.wgsl b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.wgsl
index 944a81e..3b9fe0a 100644
--- a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = sqrt(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_20c74e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_20c74e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_20c74e();
 }
diff --git a/test/intrinsics/gen/sqrt/8c7024.wgsl b/test/intrinsics/gen/sqrt/8c7024.wgsl
index 3cc8b8b..4e929d6 100644
--- a/test/intrinsics/gen/sqrt/8c7024.wgsl
+++ b/test/intrinsics/gen/sqrt/8c7024.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = sqrt(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_8c7024();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_8c7024();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_8c7024();
 }
diff --git a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.wgsl b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.wgsl
index 7021231..36b4a8b 100644
--- a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = sqrt(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_8c7024();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_8c7024();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_8c7024();
 }
diff --git a/test/intrinsics/gen/sqrt/aa0d7a.wgsl b/test/intrinsics/gen/sqrt/aa0d7a.wgsl
index a9b5ec2..e15b170 100644
--- a/test/intrinsics/gen/sqrt/aa0d7a.wgsl
+++ b/test/intrinsics/gen/sqrt/aa0d7a.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = sqrt(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_aa0d7a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_aa0d7a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_aa0d7a();
 }
diff --git a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.wgsl b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.wgsl
index 3158248..47ab81a 100644
--- a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = sqrt(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_aa0d7a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_aa0d7a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_aa0d7a();
 }
diff --git a/test/intrinsics/gen/sqrt/f8c59a.wgsl b/test/intrinsics/gen/sqrt/f8c59a.wgsl
index f201a13..5916a9f 100644
--- a/test/intrinsics/gen/sqrt/f8c59a.wgsl
+++ b/test/intrinsics/gen/sqrt/f8c59a.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = sqrt(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_f8c59a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_f8c59a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_f8c59a();
 }
diff --git a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.wgsl b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.wgsl
index 61da933..e12b658 100644
--- a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = sqrt(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   sqrt_f8c59a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   sqrt_f8c59a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   sqrt_f8c59a();
 }
diff --git a/test/intrinsics/gen/step/0b073b.wgsl b/test/intrinsics/gen/step/0b073b.wgsl
index e8f04cc..5d88c86 100644
--- a/test/intrinsics/gen/step/0b073b.wgsl
+++ b/test/intrinsics/gen/step/0b073b.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = step(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_0b073b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_0b073b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_0b073b();
 }
diff --git a/test/intrinsics/gen/step/0b073b.wgsl.expected.wgsl b/test/intrinsics/gen/step/0b073b.wgsl.expected.wgsl
index 313c3c6..36e47dd 100644
--- a/test/intrinsics/gen/step/0b073b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/step/0b073b.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = step(1.0, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_0b073b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_0b073b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_0b073b();
 }
diff --git a/test/intrinsics/gen/step/19accd.wgsl b/test/intrinsics/gen/step/19accd.wgsl
index 6dceca1..9493036 100644
--- a/test/intrinsics/gen/step/19accd.wgsl
+++ b/test/intrinsics/gen/step/19accd.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = step(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_19accd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_19accd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_19accd();
 }
diff --git a/test/intrinsics/gen/step/19accd.wgsl.expected.wgsl b/test/intrinsics/gen/step/19accd.wgsl.expected.wgsl
index 08da07c..ce2b50b 100644
--- a/test/intrinsics/gen/step/19accd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/step/19accd.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = step(vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_19accd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_19accd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_19accd();
 }
diff --git a/test/intrinsics/gen/step/334303.wgsl b/test/intrinsics/gen/step/334303.wgsl
index a4ecbd8..63d3ead 100644
--- a/test/intrinsics/gen/step/334303.wgsl
+++ b/test/intrinsics/gen/step/334303.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = step(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_334303();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_334303();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_334303();
 }
diff --git a/test/intrinsics/gen/step/334303.wgsl.expected.wgsl b/test/intrinsics/gen/step/334303.wgsl.expected.wgsl
index 3b2f197..e1cb631 100644
--- a/test/intrinsics/gen/step/334303.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/step/334303.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = step(vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_334303();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_334303();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_334303();
 }
diff --git a/test/intrinsics/gen/step/e2b337.wgsl b/test/intrinsics/gen/step/e2b337.wgsl
index bbe16f1..e691130 100644
--- a/test/intrinsics/gen/step/e2b337.wgsl
+++ b/test/intrinsics/gen/step/e2b337.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = step(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_e2b337();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_e2b337();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_e2b337();
 }
diff --git a/test/intrinsics/gen/step/e2b337.wgsl.expected.wgsl b/test/intrinsics/gen/step/e2b337.wgsl.expected.wgsl
index f626625..a6efd86 100644
--- a/test/intrinsics/gen/step/e2b337.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/step/e2b337.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = step(vec4<f32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   step_e2b337();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   step_e2b337();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   step_e2b337();
 }
diff --git a/test/intrinsics/gen/storageBarrier/d87211.wgsl b/test/intrinsics/gen/storageBarrier/d87211.wgsl
index cf5d8e1..2931174 100644
--- a/test/intrinsics/gen/storageBarrier/d87211.wgsl
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl
@@ -28,7 +28,7 @@
   storageBarrier();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   storageBarrier_d87211();
 }
diff --git a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.wgsl b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.wgsl
index 2f0b741..4c87708 100644
--- a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   storageBarrier();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   storageBarrier_d87211();
 }
diff --git a/test/intrinsics/gen/tan/244e2a.wgsl b/test/intrinsics/gen/tan/244e2a.wgsl
index 7e816e4..599499f 100644
--- a/test/intrinsics/gen/tan/244e2a.wgsl
+++ b/test/intrinsics/gen/tan/244e2a.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = tan(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_244e2a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_244e2a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_244e2a();
 }
diff --git a/test/intrinsics/gen/tan/244e2a.wgsl.expected.wgsl b/test/intrinsics/gen/tan/244e2a.wgsl.expected.wgsl
index 6e5647e..77ac6d8 100644
--- a/test/intrinsics/gen/tan/244e2a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tan/244e2a.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = tan(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_244e2a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_244e2a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_244e2a();
 }
diff --git a/test/intrinsics/gen/tan/2f030e.wgsl b/test/intrinsics/gen/tan/2f030e.wgsl
index 52504f7..3ee8e72 100644
--- a/test/intrinsics/gen/tan/2f030e.wgsl
+++ b/test/intrinsics/gen/tan/2f030e.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = tan(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_2f030e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_2f030e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_2f030e();
 }
diff --git a/test/intrinsics/gen/tan/2f030e.wgsl.expected.wgsl b/test/intrinsics/gen/tan/2f030e.wgsl.expected.wgsl
index b638e2c..3c12969 100644
--- a/test/intrinsics/gen/tan/2f030e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tan/2f030e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = tan(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_2f030e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_2f030e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_2f030e();
 }
diff --git a/test/intrinsics/gen/tan/7ea104.wgsl b/test/intrinsics/gen/tan/7ea104.wgsl
index 5c8437e..6250daa 100644
--- a/test/intrinsics/gen/tan/7ea104.wgsl
+++ b/test/intrinsics/gen/tan/7ea104.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = tan(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_7ea104();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_7ea104();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_7ea104();
 }
diff --git a/test/intrinsics/gen/tan/7ea104.wgsl.expected.wgsl b/test/intrinsics/gen/tan/7ea104.wgsl.expected.wgsl
index 078d91f..f859e50 100644
--- a/test/intrinsics/gen/tan/7ea104.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tan/7ea104.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = tan(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_7ea104();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_7ea104();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_7ea104();
 }
diff --git a/test/intrinsics/gen/tan/8ce3e9.wgsl b/test/intrinsics/gen/tan/8ce3e9.wgsl
index 1ddcfa9..85765f1 100644
--- a/test/intrinsics/gen/tan/8ce3e9.wgsl
+++ b/test/intrinsics/gen/tan/8ce3e9.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = tan(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_8ce3e9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_8ce3e9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_8ce3e9();
 }
diff --git a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.wgsl b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.wgsl
index 756d55f..a43d809 100644
--- a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = tan(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tan_8ce3e9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tan_8ce3e9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tan_8ce3e9();
 }
diff --git a/test/intrinsics/gen/tanh/5663c5.wgsl b/test/intrinsics/gen/tanh/5663c5.wgsl
index ed50ced..96b2fdb 100644
--- a/test/intrinsics/gen/tanh/5663c5.wgsl
+++ b/test/intrinsics/gen/tanh/5663c5.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = tanh(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_5663c5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_5663c5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_5663c5();
 }
diff --git a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.wgsl b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.wgsl
index 5158816..717091b 100644
--- a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = tanh(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_5663c5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_5663c5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_5663c5();
 }
diff --git a/test/intrinsics/gen/tanh/5724b3.wgsl b/test/intrinsics/gen/tanh/5724b3.wgsl
index fdee4518f..c0f35098 100644
--- a/test/intrinsics/gen/tanh/5724b3.wgsl
+++ b/test/intrinsics/gen/tanh/5724b3.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = tanh(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_5724b3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_5724b3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_5724b3();
 }
diff --git a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.wgsl b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.wgsl
index 2856696..7fbd481 100644
--- a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = tanh(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_5724b3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_5724b3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_5724b3();
 }
diff --git a/test/intrinsics/gen/tanh/9f9fb9.wgsl b/test/intrinsics/gen/tanh/9f9fb9.wgsl
index 81579ef..e83ed57 100644
--- a/test/intrinsics/gen/tanh/9f9fb9.wgsl
+++ b/test/intrinsics/gen/tanh/9f9fb9.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = tanh(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_9f9fb9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_9f9fb9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_9f9fb9();
 }
diff --git a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.wgsl b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.wgsl
index 32f523a..20184fd 100644
--- a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = tanh(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_9f9fb9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_9f9fb9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_9f9fb9();
 }
diff --git a/test/intrinsics/gen/tanh/c15fdb.wgsl b/test/intrinsics/gen/tanh/c15fdb.wgsl
index 32a04fc..20c69fd 100644
--- a/test/intrinsics/gen/tanh/c15fdb.wgsl
+++ b/test/intrinsics/gen/tanh/c15fdb.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = tanh(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_c15fdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_c15fdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_c15fdb();
 }
diff --git a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.wgsl b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.wgsl
index d7a1379..fb6e8e7 100644
--- a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = tanh(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   tanh_c15fdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   tanh_c15fdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   tanh_c15fdb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/002b2a.wgsl b/test/intrinsics/gen/textureDimensions/002b2a.wgsl
index 205bae6..96f16b2 100644
--- a/test/intrinsics/gen/textureDimensions/002b2a.wgsl
+++ b/test/intrinsics/gen/textureDimensions/002b2a.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<f32>;
+@group(1) @binding(0) var arg_0: texture_1d<f32>;
 
 // fn textureDimensions(texture: texture_1d<f32>) -> i32
 fn textureDimensions_002b2a() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_002b2a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_002b2a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_002b2a();
 }
diff --git a/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.wgsl
index b0ea573..a21a8c0 100644
--- a/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<f32>;
+@group(1) @binding(0) var arg_0 : texture_1d<f32>;
 
 fn textureDimensions_002b2a() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_002b2a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_002b2a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_002b2a();
 }
diff --git a/test/intrinsics/gen/textureDimensions/012b82.wgsl b/test/intrinsics/gen/textureDimensions/012b82.wgsl
index 40caed2..b1697be 100644
--- a/test/intrinsics/gen/textureDimensions/012b82.wgsl
+++ b/test/intrinsics/gen/textureDimensions/012b82.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<r32sint, write>) -> vec2<i32>
 fn textureDimensions_012b82() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_012b82();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_012b82();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_012b82();
 }
diff --git a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.wgsl
index dfe7af6..7ebcab6 100644
--- a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, write>;
 
 fn textureDimensions_012b82() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_012b82();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_012b82();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_012b82();
 }
diff --git a/test/intrinsics/gen/textureDimensions/08753d.wgsl b/test/intrinsics/gen/textureDimensions/08753d.wgsl
index 52e0254..05fcbdd 100644
--- a/test/intrinsics/gen/textureDimensions/08753d.wgsl
+++ b/test/intrinsics/gen/textureDimensions/08753d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16sint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba16sint, write>) -> i32
 fn textureDimensions_08753d() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_08753d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_08753d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_08753d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.wgsl
index 95f3629..45dce4b 100644
--- a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, write>;
 
 fn textureDimensions_08753d() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_08753d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_08753d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_08753d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0c4772.wgsl b/test/intrinsics/gen/textureDimensions/0c4772.wgsl
index 7ba349c..daad042 100644
--- a/test/intrinsics/gen/textureDimensions/0c4772.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0c4772.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16float, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba16float, write>) -> vec3<i32>
 fn textureDimensions_0c4772() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0c4772();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0c4772();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0c4772();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.wgsl
index 0262649..dc5fc35 100644
--- a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, write>;
 
 fn textureDimensions_0c4772() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0c4772();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0c4772();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0c4772();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0cce40.wgsl b/test/intrinsics/gen/textureDimensions/0cce40.wgsl
index 1c710ad..a9ae133 100644
--- a/test/intrinsics/gen/textureDimensions/0cce40.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0cce40.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<r32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<r32sint, write>) -> i32
 fn textureDimensions_0cce40() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0cce40();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0cce40();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0cce40();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.wgsl
index 8c156ca..04b0e24 100644
--- a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, write>;
 
 fn textureDimensions_0cce40() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0cce40();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0cce40();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0cce40();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl
index 74f7f3c..1fef317 100644
--- a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba16uint, write>) -> vec2<i32>
 fn textureDimensions_0cf2ff() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0cf2ff();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0cf2ff();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0cf2ff();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.wgsl
index cea5440..36e3e61 100644
--- a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, write>;
 
 fn textureDimensions_0cf2ff() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0cf2ff();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0cf2ff();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0cf2ff();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl
index dce0780..255f1ee 100644
--- a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<r32uint, write>) -> vec2<i32>
 fn textureDimensions_0d8b7e() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0d8b7e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0d8b7e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0d8b7e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.wgsl
index 4427b17..b4a1350 100644
--- a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, write>;
 
 fn textureDimensions_0d8b7e() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0d8b7e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0d8b7e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0d8b7e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl
index ed94fd3..be5b433 100644
--- a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16uint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba16uint, write>) -> vec3<i32>
 fn textureDimensions_0e32ee() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0e32ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0e32ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0e32ee();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.wgsl
index 971c451..9f0e1d1 100644
--- a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, write>;
 
 fn textureDimensions_0e32ee() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0e32ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0e32ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0e32ee();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl
index 99bab7e..2cc8fec 100644
--- a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
 
 // fn textureDimensions(texture: texture_2d_array<i32>) -> vec2<i32>
 fn textureDimensions_0f3c50() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0f3c50();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0f3c50();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0f3c50();
 }
diff --git a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.wgsl
index 57309a9..553f57e 100644
--- a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
 
 fn textureDimensions_0f3c50() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_0f3c50();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_0f3c50();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_0f3c50();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1191a5.wgsl b/test/intrinsics/gen/textureDimensions/1191a5.wgsl
index 714a92c..6b0382b 100644
--- a/test/intrinsics/gen/textureDimensions/1191a5.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1191a5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_2d<u32>;
 
 // fn textureDimensions(texture: texture_2d<u32>) -> vec2<i32>
 fn textureDimensions_1191a5() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1191a5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1191a5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1191a5();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.wgsl
index 51c403e..2131304 100644
--- a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d<u32>;
 
 fn textureDimensions_1191a5() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1191a5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1191a5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1191a5();
 }
diff --git a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl
index bb7a3b0..b2fa3ef 100644
--- a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl
+++ b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
 
 // fn textureDimensions(texture: texture_depth_2d, level: i32) -> vec2<i32>
 fn textureDimensions_12c9bb() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_12c9bb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_12c9bb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_12c9bb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.wgsl
index 1dd859f..14d7f89 100644
--- a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
 fn textureDimensions_12c9bb() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_12c9bb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_12c9bb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_12c9bb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/147998.wgsl b/test/intrinsics/gen/textureDimensions/147998.wgsl
index 66e2d27..41ebd81 100644
--- a/test/intrinsics/gen/textureDimensions/147998.wgsl
+++ b/test/intrinsics/gen/textureDimensions/147998.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rg32float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rg32float, write>) -> vec2<i32>
 fn textureDimensions_147998() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_147998();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_147998();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_147998();
 }
diff --git a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.wgsl
index b587cb2..3cd6855 100644
--- a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, write>;
 
 fn textureDimensions_147998() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_147998();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_147998();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_147998();
 }
diff --git a/test/intrinsics/gen/textureDimensions/16036c.wgsl b/test/intrinsics/gen/textureDimensions/16036c.wgsl
index 85e3656..c231cc4 100644
--- a/test/intrinsics/gen/textureDimensions/16036c.wgsl
+++ b/test/intrinsics/gen/textureDimensions/16036c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba8sint, write>) -> vec2<i32>
 fn textureDimensions_16036c() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_16036c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_16036c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_16036c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.wgsl
index be39823..072b71e 100644
--- a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, write>;
 
 fn textureDimensions_16036c() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_16036c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_16036c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_16036c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl
index 7963585..558f3e3 100644
--- a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16sint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba16sint, write>) -> vec3<i32>
 fn textureDimensions_1b71f0() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1b71f0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1b71f0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1b71f0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.wgsl
index 3b1d91b..8fedb78 100644
--- a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, write>;
 
 fn textureDimensions_1b71f0() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1b71f0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1b71f0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1b71f0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl
index 34ee093..d2d2980 100644
--- a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8unorm, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba8unorm, write>) -> vec2<i32>
 fn textureDimensions_1d6c26() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1d6c26();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1d6c26();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1d6c26();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.wgsl
index c6b9da7..1ca754c 100644
--- a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
 
 fn textureDimensions_1d6c26() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1d6c26();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1d6c26();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1d6c26();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl
index 12af798..a30fbe0 100644
--- a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16float, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba16float, write>) -> i32
 fn textureDimensions_1e9e39() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1e9e39();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1e9e39();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1e9e39();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.wgsl
index 84a7f69..938b104 100644
--- a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, write>;
 
 fn textureDimensions_1e9e39() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1e9e39();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1e9e39();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1e9e39();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl
index 8cde2fa..0e49717 100644
--- a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
 
 // fn textureDimensions(texture: texture_2d_array<u32>) -> vec2<i32>
 fn textureDimensions_1f20c5() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1f20c5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1f20c5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1f20c5();
 }
diff --git a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.wgsl
index ca2cab1..2cbde3e 100644
--- a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
 
 fn textureDimensions_1f20c5() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_1f20c5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_1f20c5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_1f20c5();
 }
diff --git a/test/intrinsics/gen/textureDimensions/214dd4.wgsl b/test/intrinsics/gen/textureDimensions/214dd4.wgsl
index 4c1391f..27c2d8a 100644
--- a/test/intrinsics/gen/textureDimensions/214dd4.wgsl
+++ b/test/intrinsics/gen/textureDimensions/214dd4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8sint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba8sint, write>) -> vec3<i32>
 fn textureDimensions_214dd4() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_214dd4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_214dd4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_214dd4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.wgsl
index 7e960345..a6e1919 100644
--- a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, write>;
 
 fn textureDimensions_214dd4() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_214dd4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_214dd4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_214dd4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/221f22.wgsl b/test/intrinsics/gen/textureDimensions/221f22.wgsl
index c431bbd..70098d7 100644
--- a/test/intrinsics/gen/textureDimensions/221f22.wgsl
+++ b/test/intrinsics/gen/textureDimensions/221f22.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
 
 // fn textureDimensions(texture: texture_cube_array<i32>, level: i32) -> vec2<i32>
 fn textureDimensions_221f22() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_221f22();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_221f22();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_221f22();
 }
diff --git a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.wgsl
index 55707cd..e05c6f5 100644
--- a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
 
 fn textureDimensions_221f22() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_221f22();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_221f22();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_221f22();
 }
diff --git a/test/intrinsics/gen/textureDimensions/267788.wgsl b/test/intrinsics/gen/textureDimensions/267788.wgsl
index 36846b6..d431dc7 100644
--- a/test/intrinsics/gen/textureDimensions/267788.wgsl
+++ b/test/intrinsics/gen/textureDimensions/267788.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
 
 // fn textureDimensions(texture: texture_2d_array<u32>, level: i32) -> vec2<i32>
 fn textureDimensions_267788() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_267788();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_267788();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_267788();
 }
diff --git a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.wgsl
index baf7d3a..99d3c54 100644
--- a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
 
 fn textureDimensions_267788() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_267788();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_267788();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_267788();
 }
diff --git a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl
index 7f84a66..4100047 100644
--- a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl
+++ b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
 
 // fn textureDimensions(texture: texture_3d<f32>, level: i32) -> vec3<i32>
 fn textureDimensions_26bdfa() {
   var res: vec3<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_26bdfa();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_26bdfa();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_26bdfa();
 }
diff --git a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.wgsl
index 7a1e888..5f9267e 100644
--- a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
 fn textureDimensions_26bdfa() {
   var res : vec3<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_26bdfa();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_26bdfa();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_26bdfa();
 }
diff --git a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl
index 310190d..ec36468 100644
--- a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl
+++ b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba8uint, write>) -> vec2<i32>
 fn textureDimensions_26ef6c() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_26ef6c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_26ef6c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_26ef6c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.wgsl
index 99ebb20..960c66d 100644
--- a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, write>;
 
 fn textureDimensions_26ef6c() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_26ef6c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_26ef6c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_26ef6c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2ad087.wgsl b/test/intrinsics/gen/textureDimensions/2ad087.wgsl
index 6dbbd7c..74ab99e 100644
--- a/test/intrinsics/gen/textureDimensions/2ad087.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2ad087.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba16sint, write>) -> vec2<i32>
 fn textureDimensions_2ad087() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2ad087();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2ad087();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2ad087();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.wgsl
index cf87608..c2b8327 100644
--- a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, write>;
 
 fn textureDimensions_2ad087() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2ad087();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2ad087();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2ad087();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2efa05.wgsl b/test/intrinsics/gen/textureDimensions/2efa05.wgsl
index 4752fc1..b5da206 100644
--- a/test/intrinsics/gen/textureDimensions/2efa05.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2efa05.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<u32>;
+@group(1) @binding(0) var arg_0: texture_3d<u32>;
 
 // fn textureDimensions(texture: texture_3d<u32>, level: i32) -> vec3<i32>
 fn textureDimensions_2efa05() {
   var res: vec3<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2efa05();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2efa05();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2efa05();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.wgsl
index faea123..0b9afd8 100644
--- a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<u32>;
+@group(1) @binding(0) var arg_0 : texture_3d<u32>;
 
 fn textureDimensions_2efa05() {
   var res : vec3<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2efa05();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2efa05();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2efa05();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2f289f.wgsl b/test/intrinsics/gen/textureDimensions/2f289f.wgsl
index ea31afd..0ac6e35 100644
--- a/test/intrinsics/gen/textureDimensions/2f289f.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2f289f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<r32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<r32sint, write>) -> vec3<i32>
 fn textureDimensions_2f289f() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2f289f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2f289f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2f289f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.wgsl
index 3157ff0..7ffc030 100644
--- a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, write>;
 
 fn textureDimensions_2f289f() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2f289f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2f289f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2f289f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl
index 5fe606e..0bd62a0 100644
--- a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
 
 // fn textureDimensions(texture: texture_2d<f32>, level: i32) -> vec2<i32>
 fn textureDimensions_2fe1cc() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2fe1cc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2fe1cc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2fe1cc();
 }
diff --git a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.wgsl
index 3871292..4b03276 100644
--- a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
 fn textureDimensions_2fe1cc() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_2fe1cc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_2fe1cc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_2fe1cc();
 }
diff --git a/test/intrinsics/gen/textureDimensions/318ecc.wgsl b/test/intrinsics/gen/textureDimensions/318ecc.wgsl
index 7227955..015839c 100644
--- a/test/intrinsics/gen/textureDimensions/318ecc.wgsl
+++ b/test/intrinsics/gen/textureDimensions/318ecc.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16uint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba16uint, write>) -> i32
 fn textureDimensions_318ecc() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_318ecc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_318ecc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_318ecc();
 }
diff --git a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.wgsl
index cc92f6c..d1c53d4 100644
--- a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, write>;
 
 fn textureDimensions_318ecc() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_318ecc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_318ecc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_318ecc();
 }
diff --git a/test/intrinsics/gen/textureDimensions/340d06.wgsl b/test/intrinsics/gen/textureDimensions/340d06.wgsl
index 5f47447..71af9d0 100644
--- a/test/intrinsics/gen/textureDimensions/340d06.wgsl
+++ b/test/intrinsics/gen/textureDimensions/340d06.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<r32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<r32uint, write>) -> vec3<i32>
 fn textureDimensions_340d06() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_340d06();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_340d06();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_340d06();
 }
diff --git a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.wgsl
index 5c15e76..7ae21b4 100644
--- a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, write>;
 
 fn textureDimensions_340d06() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_340d06();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_340d06();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_340d06();
 }
diff --git a/test/intrinsics/gen/textureDimensions/398e30.wgsl b/test/intrinsics/gen/textureDimensions/398e30.wgsl
index f29525a..0bdd487 100644
--- a/test/intrinsics/gen/textureDimensions/398e30.wgsl
+++ b/test/intrinsics/gen/textureDimensions/398e30.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba32uint, write>) -> vec2<i32>
 fn textureDimensions_398e30() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_398e30();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_398e30();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_398e30();
 }
diff --git a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.wgsl
index 0b87c39..457ff70 100644
--- a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, write>;
 
 fn textureDimensions_398e30() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_398e30();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_398e30();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_398e30();
 }
diff --git a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl
index 137c650..eb60d1e 100644
--- a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl
+++ b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rg32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rg32uint, write>) -> vec2<i32>
 fn textureDimensions_3a94ea() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_3a94ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_3a94ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_3a94ea();
 }
diff --git a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.wgsl
index 57ea93e..29d9579 100644
--- a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, write>;
 
 fn textureDimensions_3a94ea() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_3a94ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_3a94ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_3a94ea();
 }
diff --git a/test/intrinsics/gen/textureDimensions/3aca08.wgsl b/test/intrinsics/gen/textureDimensions/3aca08.wgsl
index edc753e..3d96944 100644
--- a/test/intrinsics/gen/textureDimensions/3aca08.wgsl
+++ b/test/intrinsics/gen/textureDimensions/3aca08.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32float, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba32float, write>) -> i32
 fn textureDimensions_3aca08() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_3aca08();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_3aca08();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_3aca08();
 }
diff --git a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.wgsl
index 2645276..ba8e34f 100644
--- a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, write>;
 
 fn textureDimensions_3aca08() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_3aca08();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_3aca08();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_3aca08();
 }
diff --git a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl
index 9269479..e3837a8 100644
--- a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl
+++ b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba8sint, write>) -> vec2<i32>
 fn textureDimensions_3c5ad8() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_3c5ad8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_3c5ad8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_3c5ad8();
 }
diff --git a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.wgsl
index 4df025d..dc42b19 100644
--- a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, write>;
 
 fn textureDimensions_3c5ad8() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_3c5ad8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_3c5ad8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_3c5ad8();
 }
diff --git a/test/intrinsics/gen/textureDimensions/4152a6.wgsl b/test/intrinsics/gen/textureDimensions/4152a6.wgsl
index adb9641..f13d3ce 100644
--- a/test/intrinsics/gen/textureDimensions/4152a6.wgsl
+++ b/test/intrinsics/gen/textureDimensions/4152a6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
 
 // fn textureDimensions(texture: texture_cube_array<u32>) -> vec2<i32>
 fn textureDimensions_4152a6() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_4152a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_4152a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_4152a6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.wgsl
index b21bb80..f9ec8d5 100644
--- a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
 
 fn textureDimensions_4152a6() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_4152a6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_4152a6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_4152a6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/423f99.wgsl b/test/intrinsics/gen/textureDimensions/423f99.wgsl
index 1b37e7e..d76008d 100644
--- a/test/intrinsics/gen/textureDimensions/423f99.wgsl
+++ b/test/intrinsics/gen/textureDimensions/423f99.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<i32>;
+@group(1) @binding(0) var arg_0: texture_1d<i32>;
 
 // fn textureDimensions(texture: texture_1d<i32>) -> i32
 fn textureDimensions_423f99() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_423f99();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_423f99();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_423f99();
 }
diff --git a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.wgsl
index bb1db6b..b84b033 100644
--- a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<i32>;
+@group(1) @binding(0) var arg_0 : texture_1d<i32>;
 
 fn textureDimensions_423f99() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_423f99();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_423f99();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_423f99();
 }
diff --git a/test/intrinsics/gen/textureDimensions/4267ee.wgsl b/test/intrinsics/gen/textureDimensions/4267ee.wgsl
index 159dff4..77143ec 100644
--- a/test/intrinsics/gen/textureDimensions/4267ee.wgsl
+++ b/test/intrinsics/gen/textureDimensions/4267ee.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba32float, write>) -> vec2<i32>
 fn textureDimensions_4267ee() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_4267ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_4267ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_4267ee();
 }
diff --git a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.wgsl
index b421e45..909269f 100644
--- a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, write>;
 
 fn textureDimensions_4267ee() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_4267ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_4267ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_4267ee();
 }
diff --git a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl
index 0d81325..8638394 100644
--- a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl
+++ b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8unorm, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba8unorm, write>) -> i32
 fn textureDimensions_42d4e6() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_42d4e6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_42d4e6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_42d4e6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.wgsl
index 8269c4b..bc98490 100644
--- a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, write>;
 
 fn textureDimensions_42d4e6() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_42d4e6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_42d4e6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_42d4e6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/48cb89.wgsl b/test/intrinsics/gen/textureDimensions/48cb89.wgsl
index c9273a3..12414cd 100644
--- a/test/intrinsics/gen/textureDimensions/48cb89.wgsl
+++ b/test/intrinsics/gen/textureDimensions/48cb89.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba16float, write>) -> vec2<i32>
 fn textureDimensions_48cb89() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_48cb89();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_48cb89();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_48cb89();
 }
diff --git a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.wgsl
index 0aad3e7..cdc0578 100644
--- a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, write>;
 
 fn textureDimensions_48cb89() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_48cb89();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_48cb89();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_48cb89();
 }
diff --git a/test/intrinsics/gen/textureDimensions/49d274.wgsl b/test/intrinsics/gen/textureDimensions/49d274.wgsl
index 6443529..b4569f0 100644
--- a/test/intrinsics/gen/textureDimensions/49d274.wgsl
+++ b/test/intrinsics/gen/textureDimensions/49d274.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rg32sint, write>) -> vec2<i32>
 fn textureDimensions_49d274() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_49d274();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_49d274();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_49d274();
 }
diff --git a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.wgsl
index a265975..00ebf36 100644
--- a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, write>;
 
 fn textureDimensions_49d274() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_49d274();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_49d274();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_49d274();
 }
diff --git a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl
index e931a04..5c8a80e 100644
--- a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl
+++ b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rg32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rg32uint, write>) -> i32
 fn textureDimensions_4df9a8() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_4df9a8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_4df9a8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_4df9a8();
 }
diff --git a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.wgsl
index a4b1a79..4078aa2 100644
--- a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, write>;
 
 fn textureDimensions_4df9a8() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_4df9a8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_4df9a8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_4df9a8();
 }
diff --git a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl
index 67e2a6b..ab5dab1 100644
--- a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl
+++ b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
 
 // fn textureDimensions(texture: texture_cube_array<f32>, level: i32) -> vec2<i32>
 fn textureDimensions_50a9ee() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_50a9ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_50a9ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_50a9ee();
 }
diff --git a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.wgsl
index b8e312e..f6e1440 100644
--- a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
 fn textureDimensions_50a9ee() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_50a9ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_50a9ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_50a9ee();
 }
diff --git a/test/intrinsics/gen/textureDimensions/52045c.wgsl b/test/intrinsics/gen/textureDimensions/52045c.wgsl
index bf44ca6..25dfd9d 100644
--- a/test/intrinsics/gen/textureDimensions/52045c.wgsl
+++ b/test/intrinsics/gen/textureDimensions/52045c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<i32>;
+@group(1) @binding(0) var arg_0: texture_1d<i32>;
 
 // fn textureDimensions(texture: texture_1d<i32>, level: i32) -> i32
 fn textureDimensions_52045c() {
   var res: i32 = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_52045c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_52045c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_52045c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.wgsl
index a031fe4..9df7fc2 100644
--- a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<i32>;
+@group(1) @binding(0) var arg_0 : texture_1d<i32>;
 
 fn textureDimensions_52045c() {
   var res : i32 = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_52045c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_52045c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_52045c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/55b23e.wgsl b/test/intrinsics/gen/textureDimensions/55b23e.wgsl
index e814f28..182bd4f 100644
--- a/test/intrinsics/gen/textureDimensions/55b23e.wgsl
+++ b/test/intrinsics/gen/textureDimensions/55b23e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rg32float, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rg32float, write>) -> i32
 fn textureDimensions_55b23e() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_55b23e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_55b23e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_55b23e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.wgsl
index ec3c950..32b929c 100644
--- a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, write>;
 
 fn textureDimensions_55b23e() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_55b23e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_55b23e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_55b23e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/579629.wgsl b/test/intrinsics/gen/textureDimensions/579629.wgsl
index a6bce4c..3892c0a 100644
--- a/test/intrinsics/gen/textureDimensions/579629.wgsl
+++ b/test/intrinsics/gen/textureDimensions/579629.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<u32>;
 
 // fn textureDimensions(texture: texture_multisampled_2d<u32>) -> vec2<i32>
 fn textureDimensions_579629() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_579629();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_579629();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_579629();
 }
diff --git a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.wgsl
index b3b0817..e157439 100644
--- a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<u32>;
 
 fn textureDimensions_579629() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_579629();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_579629();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_579629();
 }
diff --git a/test/intrinsics/gen/textureDimensions/57da0b.wgsl b/test/intrinsics/gen/textureDimensions/57da0b.wgsl
index e5b764e..92e1e1a 100644
--- a/test/intrinsics/gen/textureDimensions/57da0b.wgsl
+++ b/test/intrinsics/gen/textureDimensions/57da0b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<r32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<r32uint, write>) -> i32
 fn textureDimensions_57da0b() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_57da0b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_57da0b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_57da0b();
 }
diff --git a/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.wgsl
index 7d9bbff..f05ee1c 100644
--- a/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, write>;
 
 fn textureDimensions_57da0b() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_57da0b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_57da0b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_57da0b();
 }
diff --git a/test/intrinsics/gen/textureDimensions/57e28f.wgsl b/test/intrinsics/gen/textureDimensions/57e28f.wgsl
index cabf1d2..b0cf7cc 100644
--- a/test/intrinsics/gen/textureDimensions/57e28f.wgsl
+++ b/test/intrinsics/gen/textureDimensions/57e28f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
 
 // fn textureDimensions(texture: texture_depth_cube) -> vec2<i32>
 fn textureDimensions_57e28f() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_57e28f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_57e28f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_57e28f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.wgsl
index 3c13313..3d25747 100644
--- a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
 fn textureDimensions_57e28f() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_57e28f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_57e28f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_57e28f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/58a515.wgsl b/test/intrinsics/gen/textureDimensions/58a515.wgsl
index 2444556..9cbebcb 100644
--- a/test/intrinsics/gen/textureDimensions/58a515.wgsl
+++ b/test/intrinsics/gen/textureDimensions/58a515.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba16float, write>) -> vec2<i32>
 fn textureDimensions_58a515() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_58a515();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_58a515();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_58a515();
 }
diff --git a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.wgsl
index 2816570..c395b92 100644
--- a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, write>;
 
 fn textureDimensions_58a515() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_58a515();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_58a515();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_58a515();
 }
diff --git a/test/intrinsics/gen/textureDimensions/5985f3.wgsl b/test/intrinsics/gen/textureDimensions/5985f3.wgsl
index 5b7caaa..9c37e5f 100644
--- a/test/intrinsics/gen/textureDimensions/5985f3.wgsl
+++ b/test/intrinsics/gen/textureDimensions/5985f3.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba32sint, write>) -> vec2<i32>
 fn textureDimensions_5985f3() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_5985f3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_5985f3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_5985f3();
 }
diff --git a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.wgsl
index 58c715b..cc73d08 100644
--- a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, write>;
 
 fn textureDimensions_5985f3() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_5985f3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_5985f3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_5985f3();
 }
diff --git a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl
index 310d15c..3701763 100644
--- a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl
+++ b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba32uint, write>) -> i32
 fn textureDimensions_5caa5e() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_5caa5e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_5caa5e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_5caa5e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.wgsl
index f53a805..3f83443 100644
--- a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, write>;
 
 fn textureDimensions_5caa5e() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_5caa5e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_5caa5e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_5caa5e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/5e295d.wgsl b/test/intrinsics/gen/textureDimensions/5e295d.wgsl
index 137a220..3e4cd1b 100644
--- a/test/intrinsics/gen/textureDimensions/5e295d.wgsl
+++ b/test/intrinsics/gen/textureDimensions/5e295d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba16uint, write>) -> vec2<i32>
 fn textureDimensions_5e295d() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_5e295d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_5e295d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_5e295d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.wgsl
index 3a032e6..d8bceb6 100644
--- a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, write>;
 
 fn textureDimensions_5e295d() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_5e295d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_5e295d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_5e295d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/60bf54.wgsl b/test/intrinsics/gen/textureDimensions/60bf54.wgsl
index 13bc63e..fd0c02b 100644
--- a/test/intrinsics/gen/textureDimensions/60bf54.wgsl
+++ b/test/intrinsics/gen/textureDimensions/60bf54.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rg32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rg32sint, write>) -> vec3<i32>
 fn textureDimensions_60bf54() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_60bf54();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_60bf54();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_60bf54();
 }
diff --git a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.wgsl
index 2e20479..f9347de 100644
--- a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, write>;
 
 fn textureDimensions_60bf54() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_60bf54();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_60bf54();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_60bf54();
 }
diff --git a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl
index 2a23c47..7cab4b8 100644
--- a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl
+++ b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rg32float, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rg32float, write>) -> vec3<i32>
 fn textureDimensions_63f3cf() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_63f3cf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_63f3cf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_63f3cf();
 }
diff --git a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.wgsl
index 8586c98..43e5f15 100644
--- a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, write>;
 
 fn textureDimensions_63f3cf() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_63f3cf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_63f3cf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_63f3cf();
 }
diff --git a/test/intrinsics/gen/textureDimensions/68105c.wgsl b/test/intrinsics/gen/textureDimensions/68105c.wgsl
index e148614..9e15d77 100644
--- a/test/intrinsics/gen/textureDimensions/68105c.wgsl
+++ b/test/intrinsics/gen/textureDimensions/68105c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba32uint, write>) -> vec2<i32>
 fn textureDimensions_68105c() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_68105c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_68105c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_68105c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.wgsl
index 07b857d..853c631 100644
--- a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, write>;
 
 fn textureDimensions_68105c() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_68105c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_68105c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_68105c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/686ef2.wgsl b/test/intrinsics/gen/textureDimensions/686ef2.wgsl
index 28f3f1a..6ed1d53 100644
--- a/test/intrinsics/gen/textureDimensions/686ef2.wgsl
+++ b/test/intrinsics/gen/textureDimensions/686ef2.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<i32>;
+@group(1) @binding(0) var arg_0: texture_cube<i32>;
 
 // fn textureDimensions(texture: texture_cube<i32>, level: i32) -> vec2<i32>
 fn textureDimensions_686ef2() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_686ef2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_686ef2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_686ef2();
 }
diff --git a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.wgsl
index 2fcfe40..ba69786 100644
--- a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube<i32>;
 
 fn textureDimensions_686ef2() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_686ef2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_686ef2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_686ef2();
 }
diff --git a/test/intrinsics/gen/textureDimensions/6adac6.wgsl b/test/intrinsics/gen/textureDimensions/6adac6.wgsl
index ba2b0e3..f35d628 100644
--- a/test/intrinsics/gen/textureDimensions/6adac6.wgsl
+++ b/test/intrinsics/gen/textureDimensions/6adac6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba32sint, write>) -> i32
 fn textureDimensions_6adac6() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_6adac6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_6adac6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_6adac6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.wgsl
index 126bf44..c48c479 100644
--- a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, write>;
 
 fn textureDimensions_6adac6() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_6adac6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_6adac6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_6adac6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl
index 5c4e785..a8718fb 100644
--- a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl
+++ b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<u32>;
+@group(1) @binding(0) var arg_0: texture_3d<u32>;
 
 // fn textureDimensions(texture: texture_3d<u32>) -> vec3<i32>
 fn textureDimensions_6ec1b4() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_6ec1b4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_6ec1b4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_6ec1b4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.wgsl
index db9a3ed..6cc7cc1 100644
--- a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<u32>;
+@group(1) @binding(0) var arg_0 : texture_3d<u32>;
 
 fn textureDimensions_6ec1b4() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_6ec1b4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_6ec1b4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_6ec1b4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl
index f17c87e..395a6e0 100644
--- a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl
+++ b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8snorm, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba8snorm, write>) -> vec2<i32>
 fn textureDimensions_6f0d79() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_6f0d79();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_6f0d79();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_6f0d79();
 }
diff --git a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.wgsl
index 046b263..7b1f32c 100644
--- a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
 
 fn textureDimensions_6f0d79() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_6f0d79();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_6f0d79();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_6f0d79();
 }
diff --git a/test/intrinsics/gen/textureDimensions/702c53.wgsl b/test/intrinsics/gen/textureDimensions/702c53.wgsl
index 75321d7..401f1ea 100644
--- a/test/intrinsics/gen/textureDimensions/702c53.wgsl
+++ b/test/intrinsics/gen/textureDimensions/702c53.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8unorm, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba8unorm, write>) -> vec2<i32>
 fn textureDimensions_702c53() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_702c53();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_702c53();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_702c53();
 }
diff --git a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.wgsl
index 484d6be..27d3074 100644
--- a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, write>;
 
 fn textureDimensions_702c53() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_702c53();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_702c53();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_702c53();
 }
diff --git a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl
index cdf8de1..309d93f 100644
--- a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl
+++ b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
 
 // fn textureDimensions(texture: texture_depth_2d_array, level: i32) -> vec2<i32>
 fn textureDimensions_72e5d6() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_72e5d6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_72e5d6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_72e5d6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.wgsl
index 967f86a..b00bd04 100644
--- a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
 fn textureDimensions_72e5d6() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_72e5d6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_72e5d6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_72e5d6();
 }
diff --git a/test/intrinsics/gen/textureDimensions/79df87.wgsl b/test/intrinsics/gen/textureDimensions/79df87.wgsl
index 43b59bf..4319d63 100644
--- a/test/intrinsics/gen/textureDimensions/79df87.wgsl
+++ b/test/intrinsics/gen/textureDimensions/79df87.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<u32>;
+@group(1) @binding(0) var arg_0: texture_1d<u32>;
 
 // fn textureDimensions(texture: texture_1d<u32>, level: i32) -> i32
 fn textureDimensions_79df87() {
   var res: i32 = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_79df87();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_79df87();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_79df87();
 }
diff --git a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.wgsl
index d604e48..63b16bf 100644
--- a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<u32>;
+@group(1) @binding(0) var arg_0 : texture_1d<u32>;
 
 fn textureDimensions_79df87() {
   var res : i32 = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_79df87();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_79df87();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_79df87();
 }
diff --git a/test/intrinsics/gen/textureDimensions/7bf826.wgsl b/test/intrinsics/gen/textureDimensions/7bf826.wgsl
index d32e468..5f5b47c 100644
--- a/test/intrinsics/gen/textureDimensions/7bf826.wgsl
+++ b/test/intrinsics/gen/textureDimensions/7bf826.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
 
 // fn textureDimensions(texture: texture_depth_2d_array) -> vec2<i32>
 fn textureDimensions_7bf826() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_7bf826();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_7bf826();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_7bf826();
 }
diff --git a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.wgsl
index cf26867..50ddae7 100644
--- a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
 fn textureDimensions_7bf826() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_7bf826();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_7bf826();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_7bf826();
 }
diff --git a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl
index 6a6865a..f74769c 100644
--- a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl
+++ b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rg32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rg32sint, write>) -> vec2<i32>
 fn textureDimensions_7f5c2e() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_7f5c2e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_7f5c2e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_7f5c2e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.wgsl
index d85d357..0eecf68 100644
--- a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, write>;
 
 fn textureDimensions_7f5c2e() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_7f5c2e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_7f5c2e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_7f5c2e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8028f3.wgsl b/test/intrinsics/gen/textureDimensions/8028f3.wgsl
index 2f8952c..ade160d 100644
--- a/test/intrinsics/gen/textureDimensions/8028f3.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8028f3.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<r32float, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<r32float, write>) -> vec3<i32>
 fn textureDimensions_8028f3() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8028f3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8028f3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8028f3();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.wgsl
index 038913d..7ad5727 100644
--- a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, write>;
 
 fn textureDimensions_8028f3() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8028f3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8028f3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8028f3();
 }
diff --git a/test/intrinsics/gen/textureDimensions/811679.wgsl b/test/intrinsics/gen/textureDimensions/811679.wgsl
index 8fa0f14..70b9a6c 100644
--- a/test/intrinsics/gen/textureDimensions/811679.wgsl
+++ b/test/intrinsics/gen/textureDimensions/811679.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba32uint, write>) -> vec3<i32>
 fn textureDimensions_811679() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_811679();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_811679();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_811679();
 }
diff --git a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.wgsl
index 25c0214..154cdde 100644
--- a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, write>;
 
 fn textureDimensions_811679() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_811679();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_811679();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_811679();
 }
diff --git a/test/intrinsics/gen/textureDimensions/820596.wgsl b/test/intrinsics/gen/textureDimensions/820596.wgsl
index f06ab5e..f17caf0 100644
--- a/test/intrinsics/gen/textureDimensions/820596.wgsl
+++ b/test/intrinsics/gen/textureDimensions/820596.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rg32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rg32uint, write>) -> vec3<i32>
 fn textureDimensions_820596() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_820596();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_820596();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_820596();
 }
diff --git a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.wgsl
index c448f30..93106d5 100644
--- a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, write>;
 
 fn textureDimensions_820596() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_820596();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_820596();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_820596();
 }
diff --git a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl
index caa919d..ff1a2bb 100644
--- a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl
+++ b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba32sint, write>) -> vec2<i32>
 fn textureDimensions_83ee5a() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_83ee5a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_83ee5a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_83ee5a();
 }
diff --git a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.wgsl
index fe3b545..3481e3c 100644
--- a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, write>;
 
 fn textureDimensions_83ee5a() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_83ee5a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_83ee5a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_83ee5a();
 }
diff --git a/test/intrinsics/gen/textureDimensions/85d556.wgsl b/test/intrinsics/gen/textureDimensions/85d556.wgsl
index 565c566..91d1ef8 100644
--- a/test/intrinsics/gen/textureDimensions/85d556.wgsl
+++ b/test/intrinsics/gen/textureDimensions/85d556.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
 
 // fn textureDimensions(texture: texture_2d_array<f32>, level: i32) -> vec2<i32>
 fn textureDimensions_85d556() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_85d556();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_85d556();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_85d556();
 }
diff --git a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.wgsl
index 66fc1a8..5045441 100644
--- a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
 fn textureDimensions_85d556() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_85d556();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_85d556();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_85d556();
 }
diff --git a/test/intrinsics/gen/textureDimensions/88ad17.wgsl b/test/intrinsics/gen/textureDimensions/88ad17.wgsl
index 867ebde..7d9e6a8 100644
--- a/test/intrinsics/gen/textureDimensions/88ad17.wgsl
+++ b/test/intrinsics/gen/textureDimensions/88ad17.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<u32>;
+@group(1) @binding(0) var arg_0: texture_cube<u32>;
 
 // fn textureDimensions(texture: texture_cube<u32>, level: i32) -> vec2<i32>
 fn textureDimensions_88ad17() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_88ad17();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_88ad17();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_88ad17();
 }
diff --git a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.wgsl
index b2cb369..85f6381 100644
--- a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube<u32>;
 
 fn textureDimensions_88ad17() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_88ad17();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_88ad17();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_88ad17();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl
index 90593b6..abe1be4 100644
--- a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
 
 // fn textureDimensions(texture: texture_3d<f32>) -> vec3<i32>
 fn textureDimensions_8aa4c4() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8aa4c4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8aa4c4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8aa4c4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.wgsl
index 787b378..3a59eb6 100644
--- a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
 fn textureDimensions_8aa4c4() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8aa4c4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8aa4c4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8aa4c4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl
index 3aefda0..1e056c5 100644
--- a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<i32>;
+@group(1) @binding(0) var arg_0: texture_3d<i32>;
 
 // fn textureDimensions(texture: texture_3d<i32>) -> vec3<i32>
 fn textureDimensions_8deb5e() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8deb5e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8deb5e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8deb5e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.wgsl
index 9daad0c..1f088c3 100644
--- a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<i32>;
+@group(1) @binding(0) var arg_0 : texture_3d<i32>;
 
 fn textureDimensions_8deb5e() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8deb5e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8deb5e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8deb5e();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl
index 87f2d27..11b2d27 100644
--- a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
 
 // fn textureDimensions(texture: texture_cube_array<f32>) -> vec2<i32>
 fn textureDimensions_8f20bf() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8f20bf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8f20bf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8f20bf();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.wgsl
index 4908444..e299daf 100644
--- a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
 fn textureDimensions_8f20bf() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8f20bf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8f20bf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8f20bf();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl
index 336af29..e86c393 100644
--- a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32float, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba32float, write>) -> vec3<i32>
 fn textureDimensions_8fca0f() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8fca0f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8fca0f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8fca0f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.wgsl
index eee5870..4599b2e 100644
--- a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, write>;
 
 fn textureDimensions_8fca0f() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_8fca0f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_8fca0f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_8fca0f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/90340b.wgsl b/test/intrinsics/gen/textureDimensions/90340b.wgsl
index 619bdb9..3528ecf 100644
--- a/test/intrinsics/gen/textureDimensions/90340b.wgsl
+++ b/test/intrinsics/gen/textureDimensions/90340b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
 
 // fn textureDimensions(texture: texture_depth_cube_array) -> vec2<i32>
 fn textureDimensions_90340b() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_90340b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_90340b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_90340b();
 }
diff --git a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.wgsl
index d8668d3..2addbf1 100644
--- a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
 fn textureDimensions_90340b() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_90340b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_90340b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_90340b();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9042ab.wgsl b/test/intrinsics/gen/textureDimensions/9042ab.wgsl
index 549dc91..6a02da1 100644
--- a/test/intrinsics/gen/textureDimensions/9042ab.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9042ab.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rg32uint, write>) -> vec2<i32>
 fn textureDimensions_9042ab() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9042ab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9042ab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9042ab();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.wgsl
index 49e1251..a2d8666 100644
--- a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, write>;
 
 fn textureDimensions_9042ab() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9042ab();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9042ab();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9042ab();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9393b0.wgsl b/test/intrinsics/gen/textureDimensions/9393b0.wgsl
index 0fd7903..0ce4834 100644
--- a/test/intrinsics/gen/textureDimensions/9393b0.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9393b0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
 
 // fn textureDimensions(texture: texture_depth_cube, level: i32) -> vec2<i32>
 fn textureDimensions_9393b0() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9393b0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9393b0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9393b0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.wgsl
index ddf6ecd..caacfdc 100644
--- a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
 fn textureDimensions_9393b0() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9393b0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9393b0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9393b0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/939fdb.wgsl b/test/intrinsics/gen/textureDimensions/939fdb.wgsl
index 3e5b64d..d29eec0 100644
--- a/test/intrinsics/gen/textureDimensions/939fdb.wgsl
+++ b/test/intrinsics/gen/textureDimensions/939fdb.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
 
 // fn textureDimensions(texture: texture_depth_2d) -> vec2<i32>
 fn textureDimensions_939fdb() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_939fdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_939fdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_939fdb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.wgsl
index 3884061..12cc535 100644
--- a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
 fn textureDimensions_939fdb() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_939fdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_939fdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_939fdb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/962dcd.wgsl b/test/intrinsics/gen/textureDimensions/962dcd.wgsl
index 5ffeb6e..8831eb6 100644
--- a/test/intrinsics/gen/textureDimensions/962dcd.wgsl
+++ b/test/intrinsics/gen/textureDimensions/962dcd.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<i32>;
+@group(1) @binding(0) var arg_0: texture_cube<i32>;
 
 // fn textureDimensions(texture: texture_cube<i32>) -> vec2<i32>
 fn textureDimensions_962dcd() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_962dcd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_962dcd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_962dcd();
 }
diff --git a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.wgsl
index e6edbf5..8c1d256 100644
--- a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube<i32>;
 
 fn textureDimensions_962dcd() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_962dcd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_962dcd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_962dcd();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl
index 10553f9..463f897 100644
--- a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba32float, write>) -> vec2<i32>
 fn textureDimensions_9abfe5() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9abfe5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9abfe5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9abfe5();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.wgsl
index 8256199..fd97994 100644
--- a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, write>;
 
 fn textureDimensions_9abfe5() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9abfe5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9abfe5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9abfe5();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl
index edd2e9e..62bdec3 100644
--- a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
 
 // fn textureDimensions(texture: texture_2d_array<i32>, level: i32) -> vec2<i32>
 fn textureDimensions_9c9c57() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9c9c57();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9c9c57();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9c9c57();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.wgsl
index 4ee4826..ff8d321 100644
--- a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
 
 fn textureDimensions_9c9c57() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9c9c57();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9c9c57();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9c9c57();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl
index 0493107..6c82fcc 100644
--- a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8sint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba8sint, write>) -> i32
 fn textureDimensions_9da9e2() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9da9e2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9da9e2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9da9e2();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.wgsl
index adf06c2..3e1f941 100644
--- a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, write>;
 
 fn textureDimensions_9da9e2() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9da9e2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9da9e2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9da9e2();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl
index 76733f7..09afe70 100644
--- a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<r32uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<r32uint, write>) -> vec2<i32>
 fn textureDimensions_9eb8d8() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9eb8d8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9eb8d8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9eb8d8();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.wgsl
index d530b91..58bc54f 100644
--- a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, write>;
 
 fn textureDimensions_9eb8d8() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9eb8d8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9eb8d8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9eb8d8();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl
index 6eb973a..1892e82 100644
--- a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
 
 // fn textureDimensions(texture: texture_2d<f32>) -> vec2<i32>
 fn textureDimensions_9f8e46() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9f8e46();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9f8e46();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9f8e46();
 }
diff --git a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.wgsl
index b4eaffd..df7b1a7 100644
--- a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
 fn textureDimensions_9f8e46() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_9f8e46();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_9f8e46();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_9f8e46();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a01845.wgsl b/test/intrinsics/gen/textureDimensions/a01845.wgsl
index 85a6007..3b7b193 100644
--- a/test/intrinsics/gen/textureDimensions/a01845.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a01845.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
 
 // fn textureDimensions(texture: texture_depth_cube_array, level: i32) -> vec2<i32>
 fn textureDimensions_a01845() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a01845();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a01845();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a01845();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.wgsl
index ab0f9eb..9f7a0da 100644
--- a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
 fn textureDimensions_a01845() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a01845();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a01845();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a01845();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a7d565.wgsl b/test/intrinsics/gen/textureDimensions/a7d565.wgsl
index b571c60..88779cb 100644
--- a/test/intrinsics/gen/textureDimensions/a7d565.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a7d565.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<u32>;
+@group(1) @binding(0) var arg_0: texture_1d<u32>;
 
 // fn textureDimensions(texture: texture_1d<u32>) -> i32
 fn textureDimensions_a7d565() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a7d565();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a7d565();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a7d565();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.wgsl
index 73e5bfd..4cd2c97 100644
--- a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<u32>;
+@group(1) @binding(0) var arg_0 : texture_1d<u32>;
 
 fn textureDimensions_a7d565() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a7d565();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a7d565();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a7d565();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a863f2.wgsl b/test/intrinsics/gen/textureDimensions/a863f2.wgsl
index 8be9e9a..61b668c 100644
--- a/test/intrinsics/gen/textureDimensions/a863f2.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a863f2.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<r32float, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<r32float, write>) -> i32
 fn textureDimensions_a863f2() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a863f2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a863f2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a863f2();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.wgsl
index 820ab3b..257be4e 100644
--- a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, write>;
 
 fn textureDimensions_a863f2() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a863f2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a863f2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a863f2();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl
index a2f5e33..e10dcd1 100644
--- a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
 
 // fn textureDimensions(texture: texture_cube<f32>, level: i32) -> vec2<i32>
 fn textureDimensions_a9c9c1() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a9c9c1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a9c9c1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a9c9c1();
 }
diff --git a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.wgsl
index 754fc31..e4125c9 100644
--- a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
 fn textureDimensions_a9c9c1() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_a9c9c1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_a9c9c1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_a9c9c1();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl
index b4a35f0..a1cc174 100644
--- a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_2d<i32>;
 
 // fn textureDimensions(texture: texture_2d<i32>, level: i32) -> vec2<i32>
 fn textureDimensions_b0e16d() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b0e16d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b0e16d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b0e16d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.wgsl
index 665a62b..1bd9327 100644
--- a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d<i32>;
 
 fn textureDimensions_b0e16d() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b0e16d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b0e16d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b0e16d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b3c954.wgsl b/test/intrinsics/gen/textureDimensions/b3c954.wgsl
index 82f5c1f..bdd8173 100644
--- a/test/intrinsics/gen/textureDimensions/b3c954.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b3c954.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<u32>;
+@group(1) @binding(0) var arg_0: texture_cube<u32>;
 
 // fn textureDimensions(texture: texture_cube<u32>) -> vec2<i32>
 fn textureDimensions_b3c954() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b3c954();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b3c954();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b3c954();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.wgsl
index 8f79cc0..de3b872 100644
--- a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube<u32>;
 
 fn textureDimensions_b3c954() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b3c954();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b3c954();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b3c954();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b3e407.wgsl b/test/intrinsics/gen/textureDimensions/b3e407.wgsl
index e190837..8c7d95c 100644
--- a/test/intrinsics/gen/textureDimensions/b3e407.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b3e407.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<f32>;
+@group(1) @binding(0) var arg_0: texture_1d<f32>;
 
 // fn textureDimensions(texture: texture_1d<f32>, level: i32) -> i32
 fn textureDimensions_b3e407() {
   var res: i32 = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b3e407();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b3e407();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b3e407();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.wgsl
index f39a1ad..8ebb58e 100644
--- a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<f32>;
+@group(1) @binding(0) var arg_0 : texture_1d<f32>;
 
 fn textureDimensions_b3e407() {
   var res : i32 = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b3e407();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b3e407();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b3e407();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b91240.wgsl b/test/intrinsics/gen/textureDimensions/b91240.wgsl
index e1f304c..baf2591 100644
--- a/test/intrinsics/gen/textureDimensions/b91240.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b91240.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8snorm, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba8snorm, write>) -> vec2<i32>
 fn textureDimensions_b91240() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b91240();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b91240();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b91240();
 }
diff --git a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.wgsl
index 62d79c4..105338f 100644
--- a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, write>;
 
 fn textureDimensions_b91240() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_b91240();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_b91240();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_b91240();
 }
diff --git a/test/intrinsics/gen/textureDimensions/ba1481.wgsl b/test/intrinsics/gen/textureDimensions/ba1481.wgsl
index c684259..c372ea1 100644
--- a/test/intrinsics/gen/textureDimensions/ba1481.wgsl
+++ b/test/intrinsics/gen/textureDimensions/ba1481.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_external;
+@group(1) @binding(0) var arg_0: texture_external;
 
 // fn textureDimensions(texture: texture_external) -> vec2<i32>
 fn textureDimensions_ba1481() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_ba1481();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_ba1481();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_ba1481();
 }
diff --git a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.wgsl
index 2ea9581..0bcf4af 100644
--- a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_external;
+@group(1) @binding(0) var arg_0 : texture_external;
 
 fn textureDimensions_ba1481() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_ba1481();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_ba1481();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_ba1481();
 }
diff --git a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl
index b284560..5519317 100644
--- a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl
+++ b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba32sint, write>) -> vec3<i32>
 fn textureDimensions_bb3dde() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_bb3dde();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_bb3dde();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_bb3dde();
 }
diff --git a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.wgsl
index 006743e..005cae6 100644
--- a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, write>;
 
 fn textureDimensions_bb3dde() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_bb3dde();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_bb3dde();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_bb3dde();
 }
diff --git a/test/intrinsics/gen/textureDimensions/c30e75.wgsl b/test/intrinsics/gen/textureDimensions/c30e75.wgsl
index 1cffed5..275a7ca 100644
--- a/test/intrinsics/gen/textureDimensions/c30e75.wgsl
+++ b/test/intrinsics/gen/textureDimensions/c30e75.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<r32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<r32sint, write>) -> vec2<i32>
 fn textureDimensions_c30e75() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_c30e75();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_c30e75();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_c30e75();
 }
diff --git a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.wgsl
index a73590e..ecf60b5 100644
--- a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, write>;
 
 fn textureDimensions_c30e75() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_c30e75();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_c30e75();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_c30e75();
 }
diff --git a/test/intrinsics/gen/textureDimensions/c7943d.wgsl b/test/intrinsics/gen/textureDimensions/c7943d.wgsl
index 887906f..98ad655 100644
--- a/test/intrinsics/gen/textureDimensions/c7943d.wgsl
+++ b/test/intrinsics/gen/textureDimensions/c7943d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8uint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<rgba8uint, write>) -> vec2<i32>
 fn textureDimensions_c7943d() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_c7943d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_c7943d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_c7943d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.wgsl
index fb7bb2b..d664f33 100644
--- a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, write>;
 
 fn textureDimensions_c7943d() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_c7943d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_c7943d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_c7943d();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cc968c.wgsl b/test/intrinsics/gen/textureDimensions/cc968c.wgsl
index 9bdef45..2c32bb9 100644
--- a/test/intrinsics/gen/textureDimensions/cc968c.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cc968c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rg32sint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rg32sint, write>) -> i32
 fn textureDimensions_cc968c() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cc968c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cc968c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cc968c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.wgsl
index 2fc8088..8198585 100644
--- a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, write>;
 
 fn textureDimensions_cc968c() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cc968c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cc968c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cc968c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl
index 887baef..71072cc 100644
--- a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8snorm, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba8snorm, write>) -> i32
 fn textureDimensions_cccc8f() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cccc8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cccc8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cccc8f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.wgsl
index 5d2c26d..a4d44f0 100644
--- a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, write>;
 
 fn textureDimensions_cccc8f() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cccc8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cccc8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cccc8f();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl
index b6bcb47..79da9f1 100644
--- a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8unorm, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba8unorm, write>) -> vec3<i32>
 fn textureDimensions_cd76a7() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cd76a7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cd76a7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cd76a7();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.wgsl
index 99d7eac..139070f 100644
--- a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, write>;
 
 fn textureDimensions_cd76a7() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cd76a7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cd76a7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cd76a7();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cdf473.wgsl b/test/intrinsics/gen/textureDimensions/cdf473.wgsl
index aad5966..25ceca3 100644
--- a/test/intrinsics/gen/textureDimensions/cdf473.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cdf473.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16sint, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rgba16sint, write>) -> vec2<i32>
 fn textureDimensions_cdf473() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cdf473();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cdf473();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cdf473();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.wgsl
index 4b41e3c..31373c0 100644
--- a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, write>;
 
 fn textureDimensions_cdf473() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cdf473();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cdf473();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cdf473();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cec841.wgsl b/test/intrinsics/gen/textureDimensions/cec841.wgsl
index be24ab4..0710769 100644
--- a/test/intrinsics/gen/textureDimensions/cec841.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cec841.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
 
 // fn textureDimensions(texture: texture_2d_array<f32>) -> vec2<i32>
 fn textureDimensions_cec841() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cec841();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cec841();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cec841();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.wgsl
index 0ae00a7..d1667a0 100644
--- a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
 fn textureDimensions_cec841() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cec841();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cec841();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cec841();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl
index e855d3f..2768cce 100644
--- a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8snorm, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba8snorm, write>) -> vec3<i32>
 fn textureDimensions_cf7e43() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cf7e43();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cf7e43();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cf7e43();
 }
diff --git a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.wgsl
index ea45fb6..fd5550b 100644
--- a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, write>;
 
 fn textureDimensions_cf7e43() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_cf7e43();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_cf7e43();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_cf7e43();
 }
diff --git a/test/intrinsics/gen/textureDimensions/d125bc.wgsl b/test/intrinsics/gen/textureDimensions/d125bc.wgsl
index 3f76480..e380cb2 100644
--- a/test/intrinsics/gen/textureDimensions/d125bc.wgsl
+++ b/test/intrinsics/gen/textureDimensions/d125bc.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
 
 // fn textureDimensions(texture: texture_cube<f32>) -> vec2<i32>
 fn textureDimensions_d125bc() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_d125bc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_d125bc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_d125bc();
 }
diff --git a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.wgsl
index e7de8ad..e8b2c56 100644
--- a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
 fn textureDimensions_d125bc() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_d125bc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_d125bc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_d125bc();
 }
diff --git a/test/intrinsics/gen/textureDimensions/d83c45.wgsl b/test/intrinsics/gen/textureDimensions/d83c45.wgsl
index a15bcc5..feec4d5 100644
--- a/test/intrinsics/gen/textureDimensions/d83c45.wgsl
+++ b/test/intrinsics/gen/textureDimensions/d83c45.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
 
 // fn textureDimensions(texture: texture_cube_array<u32>, level: i32) -> vec2<i32>
 fn textureDimensions_d83c45() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_d83c45();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_d83c45();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_d83c45();
 }
diff --git a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.wgsl
index 36e283f..4134f65 100644
--- a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
 
 fn textureDimensions_d83c45() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_d83c45();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_d83c45();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_d83c45();
 }
diff --git a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl
index 0a934aa..5fe4ee1 100644
--- a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl
+++ b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<i32>;
 
 // fn textureDimensions(texture: texture_multisampled_2d<i32>) -> vec2<i32>
 fn textureDimensions_daf7c0() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_daf7c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_daf7c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_daf7c0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.wgsl
index 6660e21..6d2fbeb 100644
--- a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<i32>;
 
 fn textureDimensions_daf7c0() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_daf7c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_daf7c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_daf7c0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl
index 5bc6318..d9da1be 100644
--- a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl
+++ b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8uint, write>;
 
 // fn textureDimensions(texture: texture_storage_1d<rgba8uint, write>) -> i32
 fn textureDimensions_dc2dd0() {
   var res: i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_dc2dd0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_dc2dd0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_dc2dd0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.wgsl
index 311cfef..5151ae9 100644
--- a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, write>;
 
 fn textureDimensions_dc2dd0() {
   var res : i32 = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_dc2dd0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_dc2dd0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_dc2dd0();
 }
diff --git a/test/intrinsics/gen/textureDimensions/e927be.wgsl b/test/intrinsics/gen/textureDimensions/e927be.wgsl
index cd3d114..38da82e 100644
--- a/test/intrinsics/gen/textureDimensions/e927be.wgsl
+++ b/test/intrinsics/gen/textureDimensions/e927be.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
 
 // fn textureDimensions(texture: texture_cube_array<i32>) -> vec2<i32>
 fn textureDimensions_e927be() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_e927be();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_e927be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_e927be();
 }
diff --git a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.wgsl
index 3fa38e7..637bad6 100644
--- a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
 
 fn textureDimensions_e927be() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_e927be();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_e927be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_e927be();
 }
diff --git a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl
index 55fcd5f..e2ae8ec 100644
--- a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl
+++ b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<r32float, write>) -> vec2<i32>
 fn textureDimensions_e9e96c() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_e9e96c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_e9e96c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_e9e96c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.wgsl
index 2a7e11b..0f84fac 100644
--- a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, write>;
 
 fn textureDimensions_e9e96c() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_e9e96c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_e9e96c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_e9e96c();
 }
diff --git a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl
index 2ee889a..80750e3 100644
--- a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl
+++ b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<f32>;
 
 // fn textureDimensions(texture: texture_multisampled_2d<f32>) -> vec2<i32>
 fn textureDimensions_ef5b89() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_ef5b89();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_ef5b89();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_ef5b89();
 }
diff --git a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.wgsl
index be6e296..f758962 100644
--- a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<f32>;
 
 fn textureDimensions_ef5b89() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_ef5b89();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_ef5b89();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_ef5b89();
 }
diff --git a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl
index 121c855..b7dc738 100644
--- a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl
+++ b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<i32>;
+@group(1) @binding(0) var arg_0: texture_3d<i32>;
 
 // fn textureDimensions(texture: texture_3d<i32>, level: i32) -> vec3<i32>
 fn textureDimensions_efc8a4() {
   var res: vec3<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_efc8a4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_efc8a4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_efc8a4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.wgsl
index 213bf04..ba6f1db 100644
--- a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<i32>;
+@group(1) @binding(0) var arg_0 : texture_3d<i32>;
 
 fn textureDimensions_efc8a4() {
   var res : vec3<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_efc8a4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_efc8a4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_efc8a4();
 }
diff --git a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl
index dd3c2da..13edf77 100644
--- a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl
+++ b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0: texture_depth_multisampled_2d;
 
 // fn textureDimensions(texture: texture_depth_multisampled_2d) -> vec2<i32>
 fn textureDimensions_f60bdb() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_f60bdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_f60bdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_f60bdb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.wgsl
index 9a0b4b5..04d2455 100644
--- a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 fn textureDimensions_f60bdb() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_f60bdb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_f60bdb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_f60bdb();
 }
diff --git a/test/intrinsics/gen/textureDimensions/f7145b.wgsl b/test/intrinsics/gen/textureDimensions/f7145b.wgsl
index f0887c3..f8da7e1 100644
--- a/test/intrinsics/gen/textureDimensions/f7145b.wgsl
+++ b/test/intrinsics/gen/textureDimensions/f7145b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_2d<u32>;
 
 // fn textureDimensions(texture: texture_2d<u32>, level: i32) -> vec2<i32>
 fn textureDimensions_f7145b() {
   var res: vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_f7145b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_f7145b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_f7145b();
 }
diff --git a/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.wgsl
index 86aa13f..dd3335d 100644
--- a/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d<u32>;
 
 fn textureDimensions_f7145b() {
   var res : vec2<i32> = textureDimensions(arg_0, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_f7145b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_f7145b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_f7145b();
 }
diff --git a/test/intrinsics/gen/textureDimensions/f931c7.wgsl b/test/intrinsics/gen/textureDimensions/f931c7.wgsl
index 5fdab32..aa29d97 100644
--- a/test/intrinsics/gen/textureDimensions/f931c7.wgsl
+++ b/test/intrinsics/gen/textureDimensions/f931c7.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<r32float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d<r32float, write>) -> vec2<i32>
 fn textureDimensions_f931c7() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_f931c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_f931c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_f931c7();
 }
diff --git a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.wgsl
index caf7d59..14de15a 100644
--- a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, write>;
 
 fn textureDimensions_f931c7() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_f931c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_f931c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_f931c7();
 }
diff --git a/test/intrinsics/gen/textureDimensions/fa9859.wgsl b/test/intrinsics/gen/textureDimensions/fa9859.wgsl
index 13815d7..b6a1a04 100644
--- a/test/intrinsics/gen/textureDimensions/fa9859.wgsl
+++ b/test/intrinsics/gen/textureDimensions/fa9859.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_2d<i32>;
 
 // fn textureDimensions(texture: texture_2d<i32>) -> vec2<i32>
 fn textureDimensions_fa9859() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_fa9859();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_fa9859();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_fa9859();
 }
diff --git a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.wgsl
index 772b8b8..58b2bd0 100644
--- a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d<i32>;
 
 fn textureDimensions_fa9859() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_fa9859();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_fa9859();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_fa9859();
 }
diff --git a/test/intrinsics/gen/textureDimensions/fb5670.wgsl b/test/intrinsics/gen/textureDimensions/fb5670.wgsl
index a6b1d31..5151597 100644
--- a/test/intrinsics/gen/textureDimensions/fb5670.wgsl
+++ b/test/intrinsics/gen/textureDimensions/fb5670.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32float, write>;
 
 // fn textureDimensions(texture: texture_storage_2d_array<rg32float, write>) -> vec2<i32>
 fn textureDimensions_fb5670() {
   var res: vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_fb5670();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_fb5670();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_fb5670();
 }
diff --git a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.wgsl
index e5d460d..79fcdb8 100644
--- a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, write>;
 
 fn textureDimensions_fb5670() {
   var res : vec2<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_fb5670();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_fb5670();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_fb5670();
 }
diff --git a/test/intrinsics/gen/textureDimensions/fcac78.wgsl b/test/intrinsics/gen/textureDimensions/fcac78.wgsl
index beaf94c..6a3c215 100644
--- a/test/intrinsics/gen/textureDimensions/fcac78.wgsl
+++ b/test/intrinsics/gen/textureDimensions/fcac78.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8uint, write>;
 
 // fn textureDimensions(texture: texture_storage_3d<rgba8uint, write>) -> vec3<i32>
 fn textureDimensions_fcac78() {
   var res: vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_fcac78();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_fcac78();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_fcac78();
 }
diff --git a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.wgsl b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.wgsl
index 6b708dc..bd243ab 100644
--- a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, write>;
 
 fn textureDimensions_fcac78() {
   var res : vec3<i32> = textureDimensions(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureDimensions_fcac78();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureDimensions_fcac78();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureDimensions_fcac78();
 }
diff --git a/test/intrinsics/gen/textureGather/01305f.wgsl b/test/intrinsics/gen/textureGather/01305f.wgsl
index 15f035c..55af300 100644
--- a/test/intrinsics/gen/textureGather/01305f.wgsl
+++ b/test/intrinsics/gen/textureGather/01305f.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d_array<u32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d_array<u32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d_array<u32>, sampler: sampler, coords: vec2<f32>, array_index: i32) -> vec4<u32>
 fn textureGather_01305f() {
   var res: vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_01305f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_01305f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_01305f();
 }
diff --git a/test/intrinsics/gen/textureGather/01305f.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/01305f.wgsl.expected.wgsl
index da4c38f..b683348 100644
--- a/test/intrinsics/gen/textureGather/01305f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/01305f.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d_array<u32>;
+@group(1) @binding(1) var arg_1 : texture_2d_array<u32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_01305f() {
   var res : vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_01305f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_01305f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_01305f();
 }
diff --git a/test/intrinsics/gen/textureGather/06030a.wgsl b/test/intrinsics/gen/textureGather/06030a.wgsl
index 1e42042..3ae4106 100644
--- a/test/intrinsics/gen/textureGather/06030a.wgsl
+++ b/test/intrinsics/gen/textureGather/06030a.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d_array<f32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d_array<f32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, offset: vec2<i32>) -> vec4<f32>
 fn textureGather_06030a() {
   var res: vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_06030a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_06030a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_06030a();
 }
diff --git a/test/intrinsics/gen/textureGather/06030a.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/06030a.wgsl.expected.wgsl
index 7faad62..6709ed6 100644
--- a/test/intrinsics/gen/textureGather/06030a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/06030a.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1 : texture_2d_array<f32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_06030a() {
   var res : vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_06030a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_06030a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_06030a();
 }
diff --git a/test/intrinsics/gen/textureGather/10c554.wgsl b/test/intrinsics/gen/textureGather/10c554.wgsl
index d64a317..7abaa7f 100644
--- a/test/intrinsics/gen/textureGather/10c554.wgsl
+++ b/test/intrinsics/gen/textureGather/10c554.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureGather(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
 fn textureGather_10c554() {
   var res: vec4<f32> = textureGather(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_10c554();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_10c554();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_10c554();
 }
diff --git a/test/intrinsics/gen/textureGather/10c554.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/10c554.wgsl.expected.wgsl
index 748e379..71d449e 100644
--- a/test/intrinsics/gen/textureGather/10c554.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/10c554.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureGather_10c554() {
   var res : vec4<f32> = textureGather(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_10c554();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_10c554();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_10c554();
 }
diff --git a/test/intrinsics/gen/textureGather/15d79c.wgsl b/test/intrinsics/gen/textureGather/15d79c.wgsl
index 55c4e46..47bc2da 100644
--- a/test/intrinsics/gen/textureGather/15d79c.wgsl
+++ b/test/intrinsics/gen/textureGather/15d79c.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d<f32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d<f32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<f32>
 fn textureGather_15d79c() {
   var res: vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_15d79c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_15d79c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_15d79c();
 }
diff --git a/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.wgsl
index 5319046..14d9203 100644
--- a/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d<f32>;
+@group(1) @binding(1) var arg_1 : texture_2d<f32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_15d79c() {
   var res : vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_15d79c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_15d79c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_15d79c();
 }
diff --git a/test/intrinsics/gen/textureGather/2e0ed5.wgsl b/test/intrinsics/gen/textureGather/2e0ed5.wgsl
index c8c1104..ff561c9 100644
--- a/test/intrinsics/gen/textureGather/2e0ed5.wgsl
+++ b/test/intrinsics/gen/textureGather/2e0ed5.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureGather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
 fn textureGather_2e0ed5() {
   var res: vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_2e0ed5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_2e0ed5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_2e0ed5();
 }
diff --git a/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.wgsl
index 3439a78..f3b60b8 100644
--- a/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureGather_2e0ed5() {
   var res : vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_2e0ed5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_2e0ed5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_2e0ed5();
 }
diff --git a/test/intrinsics/gen/textureGather/3112e8.wgsl b/test/intrinsics/gen/textureGather/3112e8.wgsl
index e556b30..a08ae70 100644
--- a/test/intrinsics/gen/textureGather/3112e8.wgsl
+++ b/test/intrinsics/gen/textureGather/3112e8.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_cube_array<f32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_cube_array<f32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: i32) -> vec4<f32>
 fn textureGather_3112e8() {
   var res: vec4<f32> = textureGather(1, arg_1, arg_2, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_3112e8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_3112e8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_3112e8();
 }
diff --git a/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.wgsl
index 5b0bd78..3f7ac9e 100644
--- a/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_cube_array<f32>;
+@group(1) @binding(1) var arg_1 : texture_cube_array<f32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_3112e8() {
   var res : vec4<f32> = textureGather(1, arg_1, arg_2, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_3112e8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_3112e8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_3112e8();
 }
diff --git a/test/intrinsics/gen/textureGather/3c527e.wgsl b/test/intrinsics/gen/textureGather/3c527e.wgsl
index 1877c38..f6f8f67 100644
--- a/test/intrinsics/gen/textureGather/3c527e.wgsl
+++ b/test/intrinsics/gen/textureGather/3c527e.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_cube_array<u32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_cube_array<u32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_cube_array<u32>, sampler: sampler, coords: vec3<f32>, array_index: i32) -> vec4<u32>
 fn textureGather_3c527e() {
   var res: vec4<u32> = textureGather(1, arg_1, arg_2, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_3c527e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_3c527e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_3c527e();
 }
diff --git a/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.wgsl
index 4aeb587..9753db4 100644
--- a/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_cube_array<u32>;
+@group(1) @binding(1) var arg_1 : texture_cube_array<u32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_3c527e() {
   var res : vec4<u32> = textureGather(1, arg_1, arg_2, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_3c527e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_3c527e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_3c527e();
 }
diff --git a/test/intrinsics/gen/textureGather/43025d.wgsl b/test/intrinsics/gen/textureGather/43025d.wgsl
index 219cd0a..2cf28ef 100644
--- a/test/intrinsics/gen/textureGather/43025d.wgsl
+++ b/test/intrinsics/gen/textureGather/43025d.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureGather(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: i32) -> vec4<f32>
 fn textureGather_43025d() {
   var res: vec4<f32> = textureGather(arg_0, arg_1, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_43025d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_43025d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_43025d();
 }
diff --git a/test/intrinsics/gen/textureGather/43025d.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/43025d.wgsl.expected.wgsl
index 121a1da..f94fa45 100644
--- a/test/intrinsics/gen/textureGather/43025d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/43025d.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureGather_43025d() {
   var res : vec4<f32> = textureGather(arg_0, arg_1, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_43025d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_43025d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_43025d();
 }
diff --git a/test/intrinsics/gen/textureGather/4f2350.wgsl b/test/intrinsics/gen/textureGather/4f2350.wgsl
index 296c243..6945968 100644
--- a/test/intrinsics/gen/textureGather/4f2350.wgsl
+++ b/test/intrinsics/gen/textureGather/4f2350.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d_array<i32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d_array<i32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d_array<i32>, sampler: sampler, coords: vec2<f32>, array_index: i32, offset: vec2<i32>) -> vec4<i32>
 fn textureGather_4f2350() {
   var res: vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_4f2350();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_4f2350();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_4f2350();
 }
diff --git a/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.wgsl
index 4dade7f..75a6912 100644
--- a/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d_array<i32>;
+@group(1) @binding(1) var arg_1 : texture_2d_array<i32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_4f2350() {
   var res : vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_4f2350();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_4f2350();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_4f2350();
 }
diff --git a/test/intrinsics/gen/textureGather/51cf0b.wgsl b/test/intrinsics/gen/textureGather/51cf0b.wgsl
index 349aaa6..6e503ce 100644
--- a/test/intrinsics/gen/textureGather/51cf0b.wgsl
+++ b/test/intrinsics/gen/textureGather/51cf0b.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d_array<i32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d_array<i32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d_array<i32>, sampler: sampler, coords: vec2<f32>, array_index: i32) -> vec4<i32>
 fn textureGather_51cf0b() {
   var res: vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_51cf0b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_51cf0b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_51cf0b();
 }
diff --git a/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.wgsl
index d14de6e..e326e20 100644
--- a/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d_array<i32>;
+@group(1) @binding(1) var arg_1 : texture_2d_array<i32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_51cf0b() {
   var res : vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_51cf0b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_51cf0b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_51cf0b();
 }
diff --git a/test/intrinsics/gen/textureGather/53ece6.wgsl b/test/intrinsics/gen/textureGather/53ece6.wgsl
index b218496..045f2ba 100644
--- a/test/intrinsics/gen/textureGather/53ece6.wgsl
+++ b/test/intrinsics/gen/textureGather/53ece6.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureGather(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: i32, offset: vec2<i32>) -> vec4<f32>
 fn textureGather_53ece6() {
   var res: vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_53ece6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_53ece6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_53ece6();
 }
diff --git a/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.wgsl
index 8cf894a..27c47cf 100644
--- a/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureGather_53ece6() {
   var res : vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_53ece6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_53ece6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_53ece6();
 }
diff --git a/test/intrinsics/gen/textureGather/57bfc6.wgsl b/test/intrinsics/gen/textureGather/57bfc6.wgsl
index 27ab266..daf1cc0 100644
--- a/test/intrinsics/gen/textureGather/57bfc6.wgsl
+++ b/test/intrinsics/gen/textureGather/57bfc6.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_cube<f32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_cube<f32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
 fn textureGather_57bfc6() {
   var res: vec4<f32> = textureGather(1, arg_1, arg_2, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_57bfc6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_57bfc6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_57bfc6();
 }
diff --git a/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.wgsl
index 5be66ca..8273199 100644
--- a/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_cube<f32>;
+@group(1) @binding(1) var arg_1 : texture_cube<f32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_57bfc6() {
   var res : vec4<f32> = textureGather(1, arg_1, arg_2, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_57bfc6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_57bfc6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_57bfc6();
 }
diff --git a/test/intrinsics/gen/textureGather/587ba3.wgsl b/test/intrinsics/gen/textureGather/587ba3.wgsl
index ac9a292..5bc617c 100644
--- a/test/intrinsics/gen/textureGather/587ba3.wgsl
+++ b/test/intrinsics/gen/textureGather/587ba3.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d<i32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d<i32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d<i32>, sampler: sampler, coords: vec2<f32>) -> vec4<i32>
 fn textureGather_587ba3() {
   var res: vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_587ba3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_587ba3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_587ba3();
 }
diff --git a/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.wgsl
index 8ef9c1f..d906b0b 100644
--- a/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d<i32>;
+@group(1) @binding(1) var arg_1 : texture_2d<i32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_587ba3() {
   var res : vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_587ba3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_587ba3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_587ba3();
 }
diff --git a/test/intrinsics/gen/textureGather/69e0fb.wgsl b/test/intrinsics/gen/textureGather/69e0fb.wgsl
index d8c2376..3d4a9fa 100644
--- a/test/intrinsics/gen/textureGather/69e0fb.wgsl
+++ b/test/intrinsics/gen/textureGather/69e0fb.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d<i32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d<i32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d<i32>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<i32>
 fn textureGather_69e0fb() {
   var res: vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_69e0fb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_69e0fb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_69e0fb();
 }
diff --git a/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.wgsl
index 21d5efd..a23c38f 100644
--- a/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d<i32>;
+@group(1) @binding(1) var arg_1 : texture_2d<i32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_69e0fb() {
   var res : vec4<i32> = textureGather(1, arg_1, arg_2, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_69e0fb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_69e0fb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_69e0fb();
 }
diff --git a/test/intrinsics/gen/textureGather/93003d.wgsl b/test/intrinsics/gen/textureGather/93003d.wgsl
index fcbedcb..c194b51 100644
--- a/test/intrinsics/gen/textureGather/93003d.wgsl
+++ b/test/intrinsics/gen/textureGather/93003d.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d<u32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d<u32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d<u32>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<u32>
 fn textureGather_93003d() {
   var res: vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_93003d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_93003d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_93003d();
 }
diff --git a/test/intrinsics/gen/textureGather/93003d.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/93003d.wgsl.expected.wgsl
index 64c3ad0..c4adea5 100644
--- a/test/intrinsics/gen/textureGather/93003d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/93003d.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d<u32>;
+@group(1) @binding(1) var arg_1 : texture_2d<u32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_93003d() {
   var res : vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_93003d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_93003d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_93003d();
 }
diff --git a/test/intrinsics/gen/textureGather/9a6358.wgsl b/test/intrinsics/gen/textureGather/9a6358.wgsl
index 7b84b02..0aff04c 100644
--- a/test/intrinsics/gen/textureGather/9a6358.wgsl
+++ b/test/intrinsics/gen/textureGather/9a6358.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureGather(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: i32) -> vec4<f32>
 fn textureGather_9a6358() {
   var res: vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_9a6358();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_9a6358();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_9a6358();
 }
diff --git a/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.wgsl
index 9721e3a..984ff98 100644
--- a/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureGather_9a6358() {
   var res : vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_9a6358();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_9a6358();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_9a6358();
 }
diff --git a/test/intrinsics/gen/textureGather/9efca2.wgsl b/test/intrinsics/gen/textureGather/9efca2.wgsl
index 2008c2e..d1fd63f 100644
--- a/test/intrinsics/gen/textureGather/9efca2.wgsl
+++ b/test/intrinsics/gen/textureGather/9efca2.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d_array<f32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d_array<f32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32) -> vec4<f32>
 fn textureGather_9efca2() {
   var res: vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_9efca2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_9efca2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_9efca2();
 }
diff --git a/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.wgsl
index 07113dd..c977428 100644
--- a/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1 : texture_2d_array<f32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_9efca2() {
   var res : vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_9efca2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_9efca2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_9efca2();
 }
diff --git a/test/intrinsics/gen/textureGather/bd0b1e.wgsl b/test/intrinsics/gen/textureGather/bd0b1e.wgsl
index 9b59824..e7bf959 100644
--- a/test/intrinsics/gen/textureGather/bd0b1e.wgsl
+++ b/test/intrinsics/gen/textureGather/bd0b1e.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d<f32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d<f32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
 fn textureGather_bd0b1e() {
   var res: vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_bd0b1e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_bd0b1e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_bd0b1e();
 }
diff --git a/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.wgsl
index 6094dd2..c4f05ce 100644
--- a/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d<f32>;
+@group(1) @binding(1) var arg_1 : texture_2d<f32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_bd0b1e() {
   var res : vec4<f32> = textureGather(1, arg_1, arg_2, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_bd0b1e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_bd0b1e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_bd0b1e();
 }
diff --git a/test/intrinsics/gen/textureGather/c409ae.wgsl b/test/intrinsics/gen/textureGather/c409ae.wgsl
index 95088b0..8778bb7 100644
--- a/test/intrinsics/gen/textureGather/c409ae.wgsl
+++ b/test/intrinsics/gen/textureGather/c409ae.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureGather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<f32>
 fn textureGather_c409ae() {
   var res: vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_c409ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_c409ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_c409ae();
 }
diff --git a/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.wgsl
index 88bc15d..3610a5d 100644
--- a/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureGather_c409ae() {
   var res : vec4<f32> = textureGather(arg_0, arg_1, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_c409ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_c409ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_c409ae();
 }
diff --git a/test/intrinsics/gen/textureGather/c55822.wgsl b/test/intrinsics/gen/textureGather/c55822.wgsl
index e91568d..9cedd59 100644
--- a/test/intrinsics/gen/textureGather/c55822.wgsl
+++ b/test/intrinsics/gen/textureGather/c55822.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_cube_array<i32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_cube_array<i32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_cube_array<i32>, sampler: sampler, coords: vec3<f32>, array_index: i32) -> vec4<i32>
 fn textureGather_c55822() {
   var res: vec4<i32> = textureGather(1, arg_1, arg_2, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_c55822();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_c55822();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_c55822();
 }
diff --git a/test/intrinsics/gen/textureGather/c55822.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/c55822.wgsl.expected.wgsl
index 58bbb42..261b01b 100644
--- a/test/intrinsics/gen/textureGather/c55822.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/c55822.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_cube_array<i32>;
+@group(1) @binding(1) var arg_1 : texture_cube_array<i32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_c55822() {
   var res : vec4<i32> = textureGather(1, arg_1, arg_2, vec3<f32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_c55822();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_c55822();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_c55822();
 }
diff --git a/test/intrinsics/gen/textureGather/e1b67d.wgsl b/test/intrinsics/gen/textureGather/e1b67d.wgsl
index d243474..ac8f15a 100644
--- a/test/intrinsics/gen/textureGather/e1b67d.wgsl
+++ b/test/intrinsics/gen/textureGather/e1b67d.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_cube<u32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_cube<u32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_cube<u32>, sampler: sampler, coords: vec3<f32>) -> vec4<u32>
 fn textureGather_e1b67d() {
   var res: vec4<u32> = textureGather(1, arg_1, arg_2, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_e1b67d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_e1b67d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_e1b67d();
 }
diff --git a/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.wgsl
index 125d649..4f60ac7 100644
--- a/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_cube<u32>;
+@group(1) @binding(1) var arg_1 : texture_cube<u32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_e1b67d() {
   var res : vec4<u32> = textureGather(1, arg_1, arg_2, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_e1b67d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_e1b67d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_e1b67d();
 }
diff --git a/test/intrinsics/gen/textureGather/e9eff6.wgsl b/test/intrinsics/gen/textureGather/e9eff6.wgsl
index 02702a4..b0477f9 100644
--- a/test/intrinsics/gen/textureGather/e9eff6.wgsl
+++ b/test/intrinsics/gen/textureGather/e9eff6.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d<u32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d<u32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d<u32>, sampler: sampler, coords: vec2<f32>) -> vec4<u32>
 fn textureGather_e9eff6() {
   var res: vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_e9eff6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_e9eff6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_e9eff6();
 }
diff --git a/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.wgsl
index 1f11f53..708a011 100644
--- a/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d<u32>;
+@group(1) @binding(1) var arg_1 : texture_2d<u32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_e9eff6() {
   var res : vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_e9eff6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_e9eff6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_e9eff6();
 }
diff --git a/test/intrinsics/gen/textureGather/f5f3ba.wgsl b/test/intrinsics/gen/textureGather/f5f3ba.wgsl
index 9b998b4..f263256 100644
--- a/test/intrinsics/gen/textureGather/f5f3ba.wgsl
+++ b/test/intrinsics/gen/textureGather/f5f3ba.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_2d_array<u32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_2d_array<u32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_2d_array<u32>, sampler: sampler, coords: vec2<f32>, array_index: i32, offset: vec2<i32>) -> vec4<u32>
 fn textureGather_f5f3ba() {
   var res: vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_f5f3ba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_f5f3ba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_f5f3ba();
 }
diff --git a/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.wgsl
index 0505f50..b5ddcdc 100644
--- a/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_2d_array<u32>;
+@group(1) @binding(1) var arg_1 : texture_2d_array<u32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_f5f3ba() {
   var res : vec4<u32> = textureGather(1, arg_1, arg_2, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_f5f3ba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_f5f3ba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_f5f3ba();
 }
diff --git a/test/intrinsics/gen/textureGather/f7995a.wgsl b/test/intrinsics/gen/textureGather/f7995a.wgsl
index b4f7aac..19c42fc 100644
--- a/test/intrinsics/gen/textureGather/f7995a.wgsl
+++ b/test/intrinsics/gen/textureGather/f7995a.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(1)]] var arg_1: texture_cube<i32>;
-[[group(1), binding(2)]] var arg_2: sampler;
+@group(1) @binding(1) var arg_1: texture_cube<i32>;
+@group(1) @binding(2) var arg_2: sampler;
 
 // fn textureGather(component: i32, texture: texture_cube<i32>, sampler: sampler, coords: vec3<f32>) -> vec4<i32>
 fn textureGather_f7995a() {
   var res: vec4<i32> = textureGather(1, arg_1, arg_2, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_f7995a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_f7995a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_f7995a();
 }
diff --git a/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.wgsl b/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.wgsl
index 273f599..59c890e 100644
--- a/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(1)]] var arg_1 : texture_cube<i32>;
+@group(1) @binding(1) var arg_1 : texture_cube<i32>;
 
-[[group(1), binding(2)]] var arg_2 : sampler;
+@group(1) @binding(2) var arg_2 : sampler;
 
 fn textureGather_f7995a() {
   var res : vec4<i32> = textureGather(1, arg_1, arg_2, vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGather_f7995a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGather_f7995a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGather_f7995a();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl
index 732eb5a..afaaa84 100644
--- a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureGatherCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> vec4<f32>
 fn textureGatherCompare_182fd4() {
   var res: vec4<f32> = textureGatherCompare(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_182fd4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_182fd4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_182fd4();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.wgsl b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.wgsl
index f04178c..3a4d029 100644
--- a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureGatherCompare_182fd4() {
   var res : vec4<f32> = textureGatherCompare(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_182fd4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_182fd4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_182fd4();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl
index fcb9b53..53ed423 100644
--- a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureGatherCompare(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> vec4<f32>
 fn textureGatherCompare_60d2d1() {
   var res: vec4<f32> = textureGatherCompare(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_60d2d1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_60d2d1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_60d2d1();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.wgsl b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.wgsl
index 005cc8d..e22b1fc 100644
--- a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureGatherCompare_60d2d1() {
   var res : vec4<f32> = textureGatherCompare(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_60d2d1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_60d2d1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_60d2d1();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl
index 16611ce..5a577ba 100644
--- a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> vec4<f32>
 fn textureGatherCompare_6d9352() {
   var res: vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_6d9352();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_6d9352();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_6d9352();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.wgsl b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.wgsl
index de6fa2c..6fc40ce 100644
--- a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureGatherCompare_6d9352() {
   var res : vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_6d9352();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_6d9352();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_6d9352();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl
index b2eb4b7..c71a699 100644
--- a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureGatherCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32, offset: vec2<i32>) -> vec4<f32>
 fn textureGatherCompare_6f1267() {
   var res: vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_6f1267();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_6f1267();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_6f1267();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.wgsl b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.wgsl
index 096891c..19e782d 100644
--- a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureGatherCompare_6f1267() {
   var res : vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_6f1267();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_6f1267();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_6f1267();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl
index f10cee1..8bd4779 100644
--- a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureGatherCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> vec4<f32>
 fn textureGatherCompare_783e65() {
   var res: vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_783e65();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_783e65();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_783e65();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.wgsl b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.wgsl
index 0ee58ce..9800261 100644
--- a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureGatherCompare_783e65() {
   var res : vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_783e65();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_783e65();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_783e65();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl
index 803c4f1..b8a2718 100644
--- a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> vec4<f32>
 fn textureGatherCompare_a5f587() {
   var res: vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_a5f587();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_a5f587();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_a5f587();
 }
diff --git a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.wgsl b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.wgsl
index 9590326..44b3cf1 100644
--- a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureGatherCompare_a5f587() {
   var res : vec4<f32> = textureGatherCompare(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureGatherCompare_a5f587();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureGatherCompare_a5f587();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureGatherCompare_a5f587();
 }
diff --git a/test/intrinsics/gen/textureLoad/19cf87.wgsl b/test/intrinsics/gen/textureLoad/19cf87.wgsl
index d650031..609ce46 100644
--- a/test/intrinsics/gen/textureLoad/19cf87.wgsl
+++ b/test/intrinsics/gen/textureLoad/19cf87.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
 
 // fn textureLoad(texture: texture_depth_2d, coords: vec2<i32>, level: i32) -> f32
 fn textureLoad_19cf87() {
   var res: f32 = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_19cf87();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_19cf87();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_19cf87();
 }
diff --git a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.wgsl
index ec9ae1e..886136a2 100644
--- a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
 fn textureLoad_19cf87() {
   var res : f32 = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_19cf87();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_19cf87();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_19cf87();
 }
diff --git a/test/intrinsics/gen/textureLoad/1b8588.wgsl b/test/intrinsics/gen/textureLoad/1b8588.wgsl
index 3801d85..80a4cae 100644
--- a/test/intrinsics/gen/textureLoad/1b8588.wgsl
+++ b/test/intrinsics/gen/textureLoad/1b8588.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<u32>;
+@group(1) @binding(0) var arg_0: texture_1d<u32>;
 
 // fn textureLoad(texture: texture_1d<u32>, coords: i32, level: i32) -> vec4<u32>
 fn textureLoad_1b8588() {
   var res: vec4<u32> = textureLoad(arg_0, 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_1b8588();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_1b8588();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_1b8588();
 }
diff --git a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.wgsl
index 58a627c..07481f8 100644
--- a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<u32>;
+@group(1) @binding(0) var arg_0 : texture_1d<u32>;
 
 fn textureLoad_1b8588() {
   var res : vec4<u32> = textureLoad(arg_0, 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_1b8588();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_1b8588();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_1b8588();
 }
diff --git a/test/intrinsics/gen/textureLoad/1f2016.wgsl b/test/intrinsics/gen/textureLoad/1f2016.wgsl
index c95d6d1..9e3a286 100644
--- a/test/intrinsics/gen/textureLoad/1f2016.wgsl
+++ b/test/intrinsics/gen/textureLoad/1f2016.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
 
 // fn textureLoad(texture: texture_3d<f32>, coords: vec3<i32>, level: i32) -> vec4<f32>
 fn textureLoad_1f2016() {
   var res: vec4<f32> = textureLoad(arg_0, vec3<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_1f2016();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_1f2016();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_1f2016();
 }
diff --git a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.wgsl
index 70c8e62..910f641 100644
--- a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
 fn textureLoad_1f2016() {
   var res : vec4<f32> = textureLoad(arg_0, vec3<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_1f2016();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_1f2016();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_1f2016();
 }
diff --git a/test/intrinsics/gen/textureLoad/484344.wgsl b/test/intrinsics/gen/textureLoad/484344.wgsl
index 37b5a5f..920d8e0 100644
--- a/test/intrinsics/gen/textureLoad/484344.wgsl
+++ b/test/intrinsics/gen/textureLoad/484344.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
 
 // fn textureLoad(texture: texture_2d<f32>, coords: vec2<i32>, level: i32) -> vec4<f32>
 fn textureLoad_484344() {
   var res: vec4<f32> = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_484344();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_484344();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_484344();
 }
diff --git a/test/intrinsics/gen/textureLoad/484344.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.wgsl
index d198e1e..e87d195 100644
--- a/test/intrinsics/gen/textureLoad/484344.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
 fn textureLoad_484344() {
   var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_484344();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_484344();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_484344();
 }
diff --git a/test/intrinsics/gen/textureLoad/4fd803.wgsl b/test/intrinsics/gen/textureLoad/4fd803.wgsl
index bde90c7..d309c2b 100644
--- a/test/intrinsics/gen/textureLoad/4fd803.wgsl
+++ b/test/intrinsics/gen/textureLoad/4fd803.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<i32>;
+@group(1) @binding(0) var arg_0: texture_3d<i32>;
 
 // fn textureLoad(texture: texture_3d<i32>, coords: vec3<i32>, level: i32) -> vec4<i32>
 fn textureLoad_4fd803() {
   var res: vec4<i32> = textureLoad(arg_0, vec3<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_4fd803();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_4fd803();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_4fd803();
 }
diff --git a/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.wgsl
index 08653d9..c4f10d6 100644
--- a/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<i32>;
+@group(1) @binding(0) var arg_0 : texture_3d<i32>;
 
 fn textureLoad_4fd803() {
   var res : vec4<i32> = textureLoad(arg_0, vec3<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_4fd803();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_4fd803();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_4fd803();
 }
diff --git a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl
index 5fd2dcc..5f19cb5 100644
--- a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl
+++ b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<i32>;
+@group(1) @binding(0) var arg_0: texture_1d<i32>;
 
 // fn textureLoad(texture: texture_1d<i32>, coords: i32, level: i32) -> vec4<i32>
 fn textureLoad_5a2f9d() {
   var res: vec4<i32> = textureLoad(arg_0, 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_5a2f9d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_5a2f9d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_5a2f9d();
 }
diff --git a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.wgsl
index ecaf9a0..3e02059 100644
--- a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<i32>;
+@group(1) @binding(0) var arg_0 : texture_1d<i32>;
 
 fn textureLoad_5a2f9d() {
   var res : vec4<i32> = textureLoad(arg_0, 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_5a2f9d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_5a2f9d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_5a2f9d();
 }
diff --git a/test/intrinsics/gen/textureLoad/6154d4.wgsl b/test/intrinsics/gen/textureLoad/6154d4.wgsl
index 5786c34..ba6d633 100644
--- a/test/intrinsics/gen/textureLoad/6154d4.wgsl
+++ b/test/intrinsics/gen/textureLoad/6154d4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_2d<u32>;
 
 // fn textureLoad(texture: texture_2d<u32>, coords: vec2<i32>, level: i32) -> vec4<u32>
 fn textureLoad_6154d4() {
   var res: vec4<u32> = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_6154d4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_6154d4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_6154d4();
 }
diff --git a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.wgsl
index 64e28d7..811bfc6 100644
--- a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d<u32>;
 
 fn textureLoad_6154d4() {
   var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_6154d4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_6154d4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_6154d4();
 }
diff --git a/test/intrinsics/gen/textureLoad/6273b1.wgsl b/test/intrinsics/gen/textureLoad/6273b1.wgsl
index 600fb45..944e5a3 100644
--- a/test/intrinsics/gen/textureLoad/6273b1.wgsl
+++ b/test/intrinsics/gen/textureLoad/6273b1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0: texture_depth_multisampled_2d;
 
 // fn textureLoad(texture: texture_depth_multisampled_2d, coords: vec2<i32>, sample_index: i32) -> f32
 fn textureLoad_6273b1() {
   var res: f32 = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_6273b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_6273b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_6273b1();
 }
diff --git a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.wgsl
index 9d21c59..ec3f25b 100644
--- a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 fn textureLoad_6273b1() {
   var res : f32 = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_6273b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_6273b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_6273b1();
 }
diff --git a/test/intrinsics/gen/textureLoad/79e697.wgsl b/test/intrinsics/gen/textureLoad/79e697.wgsl
index 3ce2841..4ed308e 100644
--- a/test/intrinsics/gen/textureLoad/79e697.wgsl
+++ b/test/intrinsics/gen/textureLoad/79e697.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
 
 // fn textureLoad(texture: texture_2d_array<i32>, coords: vec2<i32>, array_index: i32, level: i32) -> vec4<i32>
 fn textureLoad_79e697() {
   var res: vec4<i32> = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_79e697();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_79e697();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_79e697();
 }
diff --git a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.wgsl
index f93cbe0..3e26917 100644
--- a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
 
 fn textureLoad_79e697() {
   var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_79e697();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_79e697();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_79e697();
 }
diff --git a/test/intrinsics/gen/textureLoad/7c90e5.wgsl b/test/intrinsics/gen/textureLoad/7c90e5.wgsl
index 3207c05..29da0dc 100644
--- a/test/intrinsics/gen/textureLoad/7c90e5.wgsl
+++ b/test/intrinsics/gen/textureLoad/7c90e5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
 
 // fn textureLoad(texture: texture_2d_array<u32>, coords: vec2<i32>, array_index: i32, level: i32) -> vec4<u32>
 fn textureLoad_7c90e5() {
   var res: vec4<u32> = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_7c90e5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_7c90e5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_7c90e5();
 }
diff --git a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.wgsl
index 779b955..3308f0f 100644
--- a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
 
 fn textureLoad_7c90e5() {
   var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_7c90e5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_7c90e5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_7c90e5();
 }
diff --git a/test/intrinsics/gen/textureLoad/81c381.wgsl b/test/intrinsics/gen/textureLoad/81c381.wgsl
index 4c156c6..dccf1b8 100644
--- a/test/intrinsics/gen/textureLoad/81c381.wgsl
+++ b/test/intrinsics/gen/textureLoad/81c381.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<f32>;
+@group(1) @binding(0) var arg_0: texture_1d<f32>;
 
 // fn textureLoad(texture: texture_1d<f32>, coords: i32, level: i32) -> vec4<f32>
 fn textureLoad_81c381() {
   var res: vec4<f32> = textureLoad(arg_0, 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_81c381();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_81c381();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_81c381();
 }
diff --git a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.wgsl
index 0658863..7671a38 100644
--- a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<f32>;
+@group(1) @binding(0) var arg_0 : texture_1d<f32>;
 
 fn textureLoad_81c381() {
   var res : vec4<f32> = textureLoad(arg_0, 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_81c381();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_81c381();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_81c381();
 }
diff --git a/test/intrinsics/gen/textureLoad/87be85.wgsl b/test/intrinsics/gen/textureLoad/87be85.wgsl
index 39366e5..b1124d7 100644
--- a/test/intrinsics/gen/textureLoad/87be85.wgsl
+++ b/test/intrinsics/gen/textureLoad/87be85.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
 
 // fn textureLoad(texture: texture_2d_array<f32>, coords: vec2<i32>, array_index: i32, level: i32) -> vec4<f32>
 fn textureLoad_87be85() {
   var res: vec4<f32> = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_87be85();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_87be85();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_87be85();
 }
diff --git a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.wgsl
index 4543559..febe014 100644
--- a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
 fn textureLoad_87be85() {
   var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_87be85();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_87be85();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_87be85();
 }
diff --git a/test/intrinsics/gen/textureLoad/8acf41.wgsl b/test/intrinsics/gen/textureLoad/8acf41.wgsl
index b19c731..effdecd 100644
--- a/test/intrinsics/gen/textureLoad/8acf41.wgsl
+++ b/test/intrinsics/gen/textureLoad/8acf41.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_external;
+@group(1) @binding(0) var arg_0: texture_external;
 
 // fn textureLoad(texture: texture_external, coords: vec2<i32>) -> vec4<f32>
 fn textureLoad_8acf41() {
   var res: vec4<f32> = textureLoad(arg_0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_8acf41();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_8acf41();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_8acf41();
 }
diff --git a/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.wgsl
index 769efb3..a25ef5f 100644
--- a/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_external;
+@group(1) @binding(0) var arg_0 : texture_external;
 
 fn textureLoad_8acf41() {
   var res : vec4<f32> = textureLoad(arg_0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_8acf41();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_8acf41();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_8acf41();
 }
diff --git a/test/intrinsics/gen/textureLoad/9b2667.wgsl b/test/intrinsics/gen/textureLoad/9b2667.wgsl
index 0e09fa4..4372cdb 100644
--- a/test/intrinsics/gen/textureLoad/9b2667.wgsl
+++ b/test/intrinsics/gen/textureLoad/9b2667.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
 
 // fn textureLoad(texture: texture_depth_2d_array, coords: vec2<i32>, array_index: i32, level: i32) -> f32
 fn textureLoad_9b2667() {
   var res: f32 = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_9b2667();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_9b2667();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_9b2667();
 }
diff --git a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.wgsl
index 271bb61..5d857d0 100644
--- a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
 fn textureLoad_9b2667() {
   var res : f32 = textureLoad(arg_0, vec2<i32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_9b2667();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_9b2667();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_9b2667();
 }
diff --git a/test/intrinsics/gen/textureLoad/a583c9.wgsl b/test/intrinsics/gen/textureLoad/a583c9.wgsl
index 39adb02..5f67c51 100644
--- a/test/intrinsics/gen/textureLoad/a583c9.wgsl
+++ b/test/intrinsics/gen/textureLoad/a583c9.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<f32>;
 
 // fn textureLoad(texture: texture_multisampled_2d<f32>, coords: vec2<i32>, sample_index: i32) -> vec4<f32>
 fn textureLoad_a583c9() {
   var res: vec4<f32> = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_a583c9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_a583c9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_a583c9();
 }
diff --git a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.wgsl
index 0ffac21..1b4fb0f 100644
--- a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<f32>;
 
 fn textureLoad_a583c9() {
   var res : vec4<f32> = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_a583c9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_a583c9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_a583c9();
 }
diff --git a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl
index 58ebcd2..236927b 100644
--- a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl
+++ b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<u32>;
+@group(1) @binding(0) var arg_0: texture_3d<u32>;
 
 // fn textureLoad(texture: texture_3d<u32>, coords: vec3<i32>, level: i32) -> vec4<u32>
 fn textureLoad_a9a9f5() {
   var res: vec4<u32> = textureLoad(arg_0, vec3<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_a9a9f5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_a9a9f5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_a9a9f5();
 }
diff --git a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.wgsl
index 0a21560..ac36fdc 100644
--- a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<u32>;
+@group(1) @binding(0) var arg_0 : texture_3d<u32>;
 
 fn textureLoad_a9a9f5() {
   var res : vec4<u32> = textureLoad(arg_0, vec3<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_a9a9f5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_a9a9f5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_a9a9f5();
 }
diff --git a/test/intrinsics/gen/textureLoad/c2a480.wgsl b/test/intrinsics/gen/textureLoad/c2a480.wgsl
index f9149e7..6aa17f7 100644
--- a/test/intrinsics/gen/textureLoad/c2a480.wgsl
+++ b/test/intrinsics/gen/textureLoad/c2a480.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_2d<i32>;
 
 // fn textureLoad(texture: texture_2d<i32>, coords: vec2<i32>, level: i32) -> vec4<i32>
 fn textureLoad_c2a480() {
   var res: vec4<i32> = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_c2a480();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_c2a480();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_c2a480();
 }
diff --git a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.wgsl
index e8cee3f..ce9e2c7 100644
--- a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d<i32>;
 
 fn textureLoad_c2a480() {
   var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_c2a480();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_c2a480();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_c2a480();
 }
diff --git a/test/intrinsics/gen/textureLoad/c378ee.wgsl b/test/intrinsics/gen/textureLoad/c378ee.wgsl
index 7a31013..2ddc52a 100644
--- a/test/intrinsics/gen/textureLoad/c378ee.wgsl
+++ b/test/intrinsics/gen/textureLoad/c378ee.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<u32>;
 
 // fn textureLoad(texture: texture_multisampled_2d<u32>, coords: vec2<i32>, sample_index: i32) -> vec4<u32>
 fn textureLoad_c378ee() {
   var res: vec4<u32> = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_c378ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_c378ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_c378ee();
 }
diff --git a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.wgsl
index 0a7ba1a..d47f756 100644
--- a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<u32>;
 
 fn textureLoad_c378ee() {
   var res : vec4<u32> = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_c378ee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_c378ee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_c378ee();
 }
diff --git a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl
index 3450bb6..65b9d17 100644
--- a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl
+++ b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<i32>;
 
 // fn textureLoad(texture: texture_multisampled_2d<i32>, coords: vec2<i32>, sample_index: i32) -> vec4<i32>
 fn textureLoad_e3d2cc() {
   var res: vec4<i32> = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_e3d2cc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_e3d2cc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_e3d2cc();
 }
diff --git a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.wgsl b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.wgsl
index b77d037..f8a1af7 100644
--- a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<i32>;
 
 fn textureLoad_e3d2cc() {
   var res : vec4<i32> = textureLoad(arg_0, vec2<i32>(), 1);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureLoad_e3d2cc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureLoad_e3d2cc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureLoad_e3d2cc();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/024820.wgsl b/test/intrinsics/gen/textureNumLayers/024820.wgsl
index c8b519d..e0ad9de 100644
--- a/test/intrinsics/gen/textureNumLayers/024820.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/024820.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
 
 // fn textureNumLayers(texture: texture_2d_array<f32>) -> i32
 fn textureNumLayers_024820() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_024820();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_024820();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_024820();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.wgsl
index 7725c8a..f58c93c 100644
--- a/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
 fn textureNumLayers_024820() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_024820();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_024820();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_024820();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/053df7.wgsl b/test/intrinsics/gen/textureNumLayers/053df7.wgsl
index b8913be..dcb5cf3 100644
--- a/test/intrinsics/gen/textureNumLayers/053df7.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/053df7.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
 
 // fn textureNumLayers(texture: texture_cube_array<u32>) -> i32
 fn textureNumLayers_053df7() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_053df7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_053df7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_053df7();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.wgsl
index 3184b30..fae44b9 100644
--- a/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
 
 fn textureNumLayers_053df7() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_053df7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_053df7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_053df7();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl
index e884562..1897559 100644
--- a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32sint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rg32sint, write>) -> i32
 fn textureNumLayers_058cc3() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_058cc3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_058cc3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_058cc3();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.wgsl
index 6f96e17..ee5d2e0 100644
--- a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, write>;
 
 fn textureNumLayers_058cc3() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_058cc3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_058cc3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_058cc3();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl
index bdf8cfe..e39514f 100644
--- a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8unorm, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba8unorm, write>) -> i32
 fn textureNumLayers_09d05d() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_09d05d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_09d05d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_09d05d();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.wgsl
index db04a65..2034fa4 100644
--- a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
 
 fn textureNumLayers_09d05d() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_09d05d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_09d05d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_09d05d();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl
index 31fc91a..f6361f1 100644
--- a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32sint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba32sint, write>) -> i32
 fn textureNumLayers_13b4ce() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_13b4ce();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_13b4ce();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_13b4ce();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.wgsl
index 2314463..5061e7e 100644
--- a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, write>;
 
 fn textureNumLayers_13b4ce() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_13b4ce();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_13b4ce();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_13b4ce();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl
index 4c830ac..c9101c0 100644
--- a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32sint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<r32sint, write>) -> i32
 fn textureNumLayers_22e53b() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_22e53b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_22e53b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_22e53b();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.wgsl
index f407b3f..6d9957b 100644
--- a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, write>;
 
 fn textureNumLayers_22e53b() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_22e53b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_22e53b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_22e53b();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/562013.wgsl b/test/intrinsics/gen/textureNumLayers/562013.wgsl
index 764c381..18c77ad 100644
--- a/test/intrinsics/gen/textureNumLayers/562013.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/562013.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16float, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba16float, write>) -> i32
 fn textureNumLayers_562013() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_562013();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_562013();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_562013();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.wgsl
index c34ef1c..7223170 100644
--- a/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, write>;
 
 fn textureNumLayers_562013() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_562013();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_562013();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_562013();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl
index 201defd..2a0f4de 100644
--- a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
 
 // fn textureNumLayers(texture: texture_cube_array<f32>) -> i32
 fn textureNumLayers_5d59cd() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_5d59cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_5d59cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_5d59cd();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.wgsl
index 57e2cf6..170c763 100644
--- a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
 fn textureNumLayers_5d59cd() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_5d59cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_5d59cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_5d59cd();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl
index 2832cf4..f551fc2 100644
--- a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32float, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba32float, write>) -> i32
 fn textureNumLayers_68a65b() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_68a65b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_68a65b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_68a65b();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.wgsl
index 4aad50a..f358993 100644
--- a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, write>;
 
 fn textureNumLayers_68a65b() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_68a65b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_68a65b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_68a65b();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl
index 4ca7348..ec88c84 100644
--- a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
 
 // fn textureNumLayers(texture: texture_depth_cube_array) -> i32
 fn textureNumLayers_778bd1() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_778bd1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_778bd1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_778bd1();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.wgsl
index d71f24b..c13e994 100644
--- a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
 fn textureNumLayers_778bd1() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_778bd1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_778bd1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_778bd1();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl
index 581a2db..7652201 100644
--- a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32float, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rg32float, write>) -> i32
 fn textureNumLayers_7f1937() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_7f1937();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_7f1937();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_7f1937();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.wgsl
index 279ac3c..4450ceb 100644
--- a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, write>;
 
 fn textureNumLayers_7f1937() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_7f1937();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_7f1937();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_7f1937();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/85f980.wgsl b/test/intrinsics/gen/textureNumLayers/85f980.wgsl
index 7f2e7ea..c91c09d 100644
--- a/test/intrinsics/gen/textureNumLayers/85f980.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/85f980.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
 
 // fn textureNumLayers(texture: texture_cube_array<i32>) -> i32
 fn textureNumLayers_85f980() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_85f980();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_85f980();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_85f980();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.wgsl
index b7e09af..4dc70c7 100644
--- a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
 
 fn textureNumLayers_85f980() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_85f980();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_85f980();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_85f980();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/87953e.wgsl b/test/intrinsics/gen/textureNumLayers/87953e.wgsl
index 249897c..d4b3e5a 100644
--- a/test/intrinsics/gen/textureNumLayers/87953e.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/87953e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
 
 // fn textureNumLayers(texture: texture_2d_array<u32>) -> i32
 fn textureNumLayers_87953e() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_87953e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_87953e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_87953e();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.wgsl
index 49b2809..26f73ea 100644
--- a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
 
 fn textureNumLayers_87953e() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_87953e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_87953e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_87953e();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl
index 0f09f81..b00bdbd 100644
--- a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
 
 // fn textureNumLayers(texture: texture_2d_array<i32>) -> i32
 fn textureNumLayers_893e7c() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_893e7c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_893e7c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_893e7c();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.wgsl
index 3e73652..3cda546 100644
--- a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
 
 fn textureNumLayers_893e7c() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_893e7c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_893e7c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_893e7c();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl
index 0bc05ec..474b691 100644
--- a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16uint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba16uint, write>) -> i32
 fn textureNumLayers_9700fb() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_9700fb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_9700fb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_9700fb();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.wgsl
index 21c77a5..ce6acab 100644
--- a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, write>;
 
 fn textureNumLayers_9700fb() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_9700fb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_9700fb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_9700fb();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl
index 155ad27..f64da9e 100644
--- a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8sint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba8sint, write>) -> i32
 fn textureNumLayers_a216d2() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_a216d2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_a216d2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_a216d2();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.wgsl
index 48e65b1..38fbc89 100644
--- a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, write>;
 
 fn textureNumLayers_a216d2() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_a216d2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_a216d2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_a216d2();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl
index c7fd877..3756b00 100644
--- a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32uint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba32uint, write>) -> i32
 fn textureNumLayers_cd5dc8() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_cd5dc8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_cd5dc8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_cd5dc8();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.wgsl
index 05e08ff..870778b 100644
--- a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, write>;
 
 fn textureNumLayers_cd5dc8() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_cd5dc8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_cd5dc8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_cd5dc8();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl
index 3426387..ccc1d48 100644
--- a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32float, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<r32float, write>) -> i32
 fn textureNumLayers_d5b228() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_d5b228();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_d5b228();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_d5b228();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.wgsl
index 8cce42a..798b0a8 100644
--- a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, write>;
 
 fn textureNumLayers_d5b228() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_d5b228();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_d5b228();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_d5b228();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl
index ce3f74a..d80689a 100644
--- a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8snorm, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba8snorm, write>) -> i32
 fn textureNumLayers_e31be1() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_e31be1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_e31be1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_e31be1();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.wgsl
index e24d1ef..e47d202 100644
--- a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
 
 fn textureNumLayers_e31be1() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_e31be1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_e31be1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_e31be1();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl
index 8558800..44cb31c 100644
--- a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
 
 // fn textureNumLayers(texture: texture_depth_2d_array) -> i32
 fn textureNumLayers_e653c0() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_e653c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_e653c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_e653c0();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.wgsl
index d4d6394..4adddfb 100644
--- a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
 fn textureNumLayers_e653c0() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_e653c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_e653c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_e653c0();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl
index 3605608..7c4e1b4 100644
--- a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32uint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<r32uint, write>) -> i32
 fn textureNumLayers_ee942f() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_ee942f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_ee942f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_ee942f();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.wgsl
index ec81d1d..4d48fac 100644
--- a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, write>;
 
 fn textureNumLayers_ee942f() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_ee942f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_ee942f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_ee942f();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/f33005.wgsl b/test/intrinsics/gen/textureNumLayers/f33005.wgsl
index 8f0efdd..6d5b10c 100644
--- a/test/intrinsics/gen/textureNumLayers/f33005.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/f33005.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16sint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba16sint, write>) -> i32
 fn textureNumLayers_f33005() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_f33005();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_f33005();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_f33005();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.wgsl
index b4da2c1..35bd8ca 100644
--- a/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, write>;
 
 fn textureNumLayers_f33005() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_f33005();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_f33005();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_f33005();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl
index 3e33fda..aab70d9 100644
--- a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32uint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rg32uint, write>) -> i32
 fn textureNumLayers_fcec98() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_fcec98();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_fcec98();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_fcec98();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.wgsl
index c1ab9b5..6a1723e 100644
--- a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, write>;
 
 fn textureNumLayers_fcec98() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_fcec98();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_fcec98();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_fcec98();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl
index df16a2d..e6fe277 100644
--- a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8uint, write>;
 
 // fn textureNumLayers(texture: texture_storage_2d_array<rgba8uint, write>) -> i32
 fn textureNumLayers_ff5e89() {
   var res: i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_ff5e89();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_ff5e89();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_ff5e89();
 }
diff --git a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.wgsl
index b5f5e98..cd8cb2d 100644
--- a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, write>;
 
 fn textureNumLayers_ff5e89() {
   var res : i32 = textureNumLayers(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLayers_ff5e89();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLayers_ff5e89();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLayers_ff5e89();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl
index 3b07e8c..367dac4 100644
--- a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
 
 // fn textureNumLevels(texture: texture_depth_cube) -> i32
 fn textureNumLevels_076cb5() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_076cb5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_076cb5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_076cb5();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.wgsl
index 9730ca4..c04d6e6 100644
--- a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
 fn textureNumLevels_076cb5() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_076cb5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_076cb5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_076cb5();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/080d95.wgsl b/test/intrinsics/gen/textureNumLevels/080d95.wgsl
index c918197..b3bbba3 100644
--- a/test/intrinsics/gen/textureNumLevels/080d95.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/080d95.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<i32>;
+@group(1) @binding(0) var arg_0: texture_cube<i32>;
 
 // fn textureNumLevels(texture: texture_cube<i32>) -> i32
 fn textureNumLevels_080d95() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_080d95();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_080d95();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_080d95();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.wgsl
index adbd0e5..686c908 100644
--- a/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube<i32>;
 
 fn textureNumLevels_080d95() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_080d95();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_080d95();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_080d95();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl
index 566b3fb..b68221c 100644
--- a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_2d<u32>;
 
 // fn textureNumLevels(texture: texture_2d<u32>) -> i32
 fn textureNumLevels_09ddd0() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_09ddd0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_09ddd0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_09ddd0();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.wgsl
index df0f042..7a4d344 100644
--- a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d<u32>;
 
 fn textureNumLevels_09ddd0() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_09ddd0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_09ddd0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_09ddd0();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/105988.wgsl b/test/intrinsics/gen/textureNumLevels/105988.wgsl
index af619bd..9f03753 100644
--- a/test/intrinsics/gen/textureNumLevels/105988.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/105988.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
 
 // fn textureNumLevels(texture: texture_2d_array<f32>) -> i32
 fn textureNumLevels_105988() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_105988();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_105988();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_105988();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.wgsl
index 776a1cc..1466976 100644
--- a/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
 fn textureNumLevels_105988() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_105988();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_105988();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_105988();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl
index 02e002f..fc14600 100644
--- a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<u32>;
+@group(1) @binding(0) var arg_0: texture_1d<u32>;
 
 // fn textureNumLevels(texture: texture_1d<u32>) -> i32
 fn textureNumLevels_1e6f3b() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_1e6f3b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_1e6f3b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_1e6f3b();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.wgsl
index 1aa0112..3643d3e 100644
--- a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<u32>;
+@group(1) @binding(0) var arg_0 : texture_1d<u32>;
 
 fn textureNumLevels_1e6f3b() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_1e6f3b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_1e6f3b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_1e6f3b();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/23f750.wgsl b/test/intrinsics/gen/textureNumLevels/23f750.wgsl
index 01cef5e..4b914fc 100644
--- a/test/intrinsics/gen/textureNumLevels/23f750.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/23f750.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_2d<i32>;
 
 // fn textureNumLevels(texture: texture_2d<i32>) -> i32
 fn textureNumLevels_23f750() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_23f750();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_23f750();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_23f750();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.wgsl
index 9589607..86bf588 100644
--- a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d<i32>;
 
 fn textureNumLevels_23f750() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_23f750();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_23f750();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_23f750();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl
index 51dcb5f..556e103 100644
--- a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
 
 // fn textureNumLevels(texture: texture_depth_cube_array) -> i32
 fn textureNumLevels_2c3575() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_2c3575();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_2c3575();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_2c3575();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.wgsl
index 2709a15..6f2f54d 100644
--- a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
 fn textureNumLevels_2c3575() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_2c3575();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_2c3575();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_2c3575();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl
index 1509fb9..04ae341 100644
--- a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<i32>;
+@group(1) @binding(0) var arg_0: texture_1d<i32>;
 
 // fn textureNumLevels(texture: texture_1d<i32>) -> i32
 fn textureNumLevels_32a0ae() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_32a0ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_32a0ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_32a0ae();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.wgsl
index 2ec9379..e5016eb 100644
--- a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<i32>;
+@group(1) @binding(0) var arg_0 : texture_1d<i32>;
 
 fn textureNumLevels_32a0ae() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_32a0ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_32a0ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_32a0ae();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl
index 9dcd78b..cab7551 100644
--- a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
 
 // fn textureNumLevels(texture: texture_2d_array<u32>) -> i32
 fn textureNumLevels_5101cf() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_5101cf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_5101cf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_5101cf();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.wgsl
index fb10b80..694397b 100644
--- a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
 
 fn textureNumLevels_5101cf() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_5101cf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_5101cf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_5101cf();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl
index 5dfe672..04be5cb 100644
--- a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<f32>;
+@group(1) @binding(0) var arg_0: texture_1d<f32>;
 
 // fn textureNumLevels(texture: texture_1d<f32>) -> i32
 fn textureNumLevels_51b5bb() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_51b5bb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_51b5bb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_51b5bb();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.wgsl
index 61beb7a..2ee7aa9 100644
--- a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<f32>;
+@group(1) @binding(0) var arg_0 : texture_1d<f32>;
 
 fn textureNumLevels_51b5bb() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_51b5bb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_51b5bb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_51b5bb();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl
index 00c1fa3..6daf4db 100644
--- a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
 
 // fn textureNumLevels(texture: texture_cube<f32>) -> i32
 fn textureNumLevels_897aaf() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_897aaf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_897aaf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_897aaf();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.wgsl
index f208427..97e9275 100644
--- a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
 fn textureNumLevels_897aaf() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_897aaf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_897aaf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_897aaf();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl
index d7c908f..c471eba 100644
--- a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<i32>;
+@group(1) @binding(0) var arg_0: texture_3d<i32>;
 
 // fn textureNumLevels(texture: texture_3d<i32>) -> i32
 fn textureNumLevels_9da7a5() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_9da7a5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_9da7a5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_9da7a5();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.wgsl
index aeb5080..5980b48 100644
--- a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<i32>;
+@group(1) @binding(0) var arg_0 : texture_3d<i32>;
 
 fn textureNumLevels_9da7a5() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_9da7a5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_9da7a5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_9da7a5();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl
index 9dfd011..0d9d201 100644
--- a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
 
 // fn textureNumLevels(texture: texture_cube_array<i32>) -> i32
 fn textureNumLevels_a91c03() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_a91c03();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_a91c03();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_a91c03();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.wgsl
index e367038..7212853 100644
--- a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
 
 fn textureNumLevels_a91c03() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_a91c03();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_a91c03();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_a91c03();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl
index baf3a5b..701dd1e 100644
--- a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
 
 // fn textureNumLevels(texture: texture_cube_array<f32>) -> i32
 fn textureNumLevels_aee7c8() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_aee7c8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_aee7c8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_aee7c8();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.wgsl
index dc4a392..32c8b5a 100644
--- a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
 fn textureNumLevels_aee7c8() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_aee7c8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_aee7c8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_aee7c8();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl
index bb46fdb..9f8980a 100644
--- a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
 
 // fn textureNumLevels(texture: texture_depth_2d) -> i32
 fn textureNumLevels_b1b12b() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_b1b12b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_b1b12b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_b1b12b();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.wgsl
index 2fe948a..97fd9a2 100644
--- a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
 fn textureNumLevels_b1b12b() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_b1b12b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_b1b12b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_b1b12b();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl
index 6c79105..57d2353 100644
--- a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<u32>;
+@group(1) @binding(0) var arg_0: texture_3d<u32>;
 
 // fn textureNumLevels(texture: texture_3d<u32>) -> i32
 fn textureNumLevels_b4f5ea() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_b4f5ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_b4f5ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_b4f5ea();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.wgsl
index 70c5658..ff1823d 100644
--- a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<u32>;
+@group(1) @binding(0) var arg_0 : texture_3d<u32>;
 
 fn textureNumLevels_b4f5ea() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_b4f5ea();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_b4f5ea();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_b4f5ea();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl
index 1353492..862bc8d 100644
--- a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
 
 // fn textureNumLevels(texture: texture_2d_array<i32>) -> i32
 fn textureNumLevels_d004a9() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_d004a9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_d004a9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_d004a9();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.wgsl
index 23230e9..e6efa4a 100644
--- a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<i32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
 
 fn textureNumLevels_d004a9() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_d004a9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_d004a9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_d004a9();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl
index 52bc5de..85fb619 100644
--- a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
 
 // fn textureNumLevels(texture: texture_3d<f32>) -> i32
 fn textureNumLevels_dca09e() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_dca09e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_dca09e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_dca09e();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.wgsl
index bbf325d..81c2ed1 100644
--- a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
 fn textureNumLevels_dca09e() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_dca09e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_dca09e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_dca09e();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/e67231.wgsl b/test/intrinsics/gen/textureNumLevels/e67231.wgsl
index 817b334..05f8db0 100644
--- a/test/intrinsics/gen/textureNumLevels/e67231.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/e67231.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
 
 // fn textureNumLevels(texture: texture_2d<f32>) -> i32
 fn textureNumLevels_e67231() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_e67231();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_e67231();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_e67231();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.wgsl
index 1db03ef..b9b5a95 100644
--- a/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
 fn textureNumLevels_e67231() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_e67231();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_e67231();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_e67231();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl
index 739603d..76ac64c 100644
--- a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<u32>;
+@group(1) @binding(0) var arg_0: texture_cube<u32>;
 
 // fn textureNumLevels(texture: texture_cube<u32>) -> i32
 fn textureNumLevels_ed078b() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_ed078b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_ed078b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_ed078b();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.wgsl
index 4684f74..1eb3d87 100644
--- a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube<u32>;
 
 fn textureNumLevels_ed078b() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_ed078b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_ed078b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_ed078b();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl
index 05a8710..10ccf4e 100644
--- a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
 
 // fn textureNumLevels(texture: texture_cube_array<u32>) -> i32
 fn textureNumLevels_f46ec6() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_f46ec6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_f46ec6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_f46ec6();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.wgsl
index ecf4daf..d380d9b 100644
--- a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<u32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
 
 fn textureNumLevels_f46ec6() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_f46ec6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_f46ec6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_f46ec6();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl
index 68737ce..bdfcc52 100644
--- a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
 
 // fn textureNumLevels(texture: texture_depth_2d_array) -> i32
 fn textureNumLevels_f5828d() {
   var res: i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_f5828d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_f5828d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_f5828d();
 }
diff --git a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.wgsl
index 5314134..501fe61 100644
--- a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
 fn textureNumLevels_f5828d() {
   var res : i32 = textureNumLevels(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumLevels_f5828d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumLevels_f5828d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumLevels_f5828d();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl
index 4015d41..8a28fd4 100644
--- a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<f32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<f32>;
 
 // fn textureNumSamples(texture: texture_multisampled_2d<f32>) -> i32
 fn textureNumSamples_2c6f14() {
   var res: i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_2c6f14();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_2c6f14();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_2c6f14();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.wgsl
index a8d25bc..be49934 100644
--- a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<f32>;
 
 fn textureNumSamples_2c6f14() {
   var res : i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_2c6f14();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_2c6f14();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_2c6f14();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl
index 606e5be..143f3a8 100644
--- a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<u32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<u32>;
 
 // fn textureNumSamples(texture: texture_multisampled_2d<u32>) -> i32
 fn textureNumSamples_42f8bb() {
   var res: i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_42f8bb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_42f8bb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_42f8bb();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.wgsl
index 2f1e941..ef11b63 100644
--- a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<u32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<u32>;
 
 fn textureNumSamples_42f8bb() {
   var res : i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_42f8bb();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_42f8bb();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_42f8bb();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/449d23.wgsl b/test/intrinsics/gen/textureNumSamples/449d23.wgsl
index 9f1de6e..c34a440 100644
--- a/test/intrinsics/gen/textureNumSamples/449d23.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/449d23.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_multisampled_2d<i32>;
+@group(1) @binding(0) var arg_0: texture_multisampled_2d<i32>;
 
 // fn textureNumSamples(texture: texture_multisampled_2d<i32>) -> i32
 fn textureNumSamples_449d23() {
   var res: i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_449d23();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_449d23();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_449d23();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.wgsl
index 74b98a5..9cab69e 100644
--- a/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_multisampled_2d<i32>;
+@group(1) @binding(0) var arg_0 : texture_multisampled_2d<i32>;
 
 fn textureNumSamples_449d23() {
   var res : i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_449d23();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_449d23();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_449d23();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl
index 4cc3843..bafea1a 100644
--- a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0: texture_depth_multisampled_2d;
 
 // fn textureNumSamples(texture: texture_depth_multisampled_2d) -> i32
 fn textureNumSamples_a3c8a0() {
   var res: i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_a3c8a0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_a3c8a0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_a3c8a0();
 }
diff --git a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.wgsl b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.wgsl
index 141f059..29a914a 100644
--- a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 fn textureNumSamples_a3c8a0() {
   var res : i32 = textureNumSamples(arg_0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureNumSamples_a3c8a0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureNumSamples_a3c8a0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureNumSamples_a3c8a0();
 }
diff --git a/test/intrinsics/gen/textureSample/02aa9b.wgsl b/test/intrinsics/gen/textureSample/02aa9b.wgsl
index 2827f6f..006a838 100644
--- a/test/intrinsics/gen/textureSample/02aa9b.wgsl
+++ b/test/intrinsics/gen/textureSample/02aa9b.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, offset: vec2<i32>) -> vec4<f32>
 fn textureSample_02aa9b() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_02aa9b();
 }
diff --git a/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.wgsl
index b005caa..8557991 100644
--- a/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_02aa9b() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_02aa9b();
 }
diff --git a/test/intrinsics/gen/textureSample/100dc0.wgsl b/test/intrinsics/gen/textureSample/100dc0.wgsl
index 49ea8de..a5f95e7 100644
--- a/test/intrinsics/gen/textureSample/100dc0.wgsl
+++ b/test/intrinsics/gen/textureSample/100dc0.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, offset: vec3<i32>) -> vec4<f32>
 fn textureSample_100dc0() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>(), vec3<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_100dc0();
 }
diff --git a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.wgsl
index 6fcbb13..b972855 100644
--- a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_100dc0() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>(), vec3<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_100dc0();
 }
diff --git a/test/intrinsics/gen/textureSample/38bbb9.wgsl b/test/intrinsics/gen/textureSample/38bbb9.wgsl
index effaac2..ee2abbd 100644
--- a/test/intrinsics/gen/textureSample/38bbb9.wgsl
+++ b/test/intrinsics/gen/textureSample/38bbb9.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> f32
 fn textureSample_38bbb9() {
   var res: f32 = textureSample(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_38bbb9();
 }
diff --git a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.wgsl
index 3d321ed..438d008 100644
--- a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_38bbb9() {
   var res : f32 = textureSample(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_38bbb9();
 }
diff --git a/test/intrinsics/gen/textureSample/3b50bd.wgsl b/test/intrinsics/gen/textureSample/3b50bd.wgsl
index c429a99..0c0b55f3 100644
--- a/test/intrinsics/gen/textureSample/3b50bd.wgsl
+++ b/test/intrinsics/gen/textureSample/3b50bd.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
 fn textureSample_3b50bd() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_3b50bd();
 }
diff --git a/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.wgsl
index 268e4e4..03ccde3 100644
--- a/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_3b50bd() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_3b50bd();
 }
diff --git a/test/intrinsics/gen/textureSample/4dd1bf.wgsl b/test/intrinsics/gen/textureSample/4dd1bf.wgsl
index 7e33126..f722cd1 100644
--- a/test/intrinsics/gen/textureSample/4dd1bf.wgsl
+++ b/test/intrinsics/gen/textureSample/4dd1bf.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: i32) -> vec4<f32>
 fn textureSample_4dd1bf() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_4dd1bf();
 }
diff --git a/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.wgsl
index 25c98d3..77ad88a 100644
--- a/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_4dd1bf() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_4dd1bf();
 }
diff --git a/test/intrinsics/gen/textureSample/51b514.wgsl b/test/intrinsics/gen/textureSample/51b514.wgsl
index 4ba2216..5433460 100644
--- a/test/intrinsics/gen/textureSample/51b514.wgsl
+++ b/test/intrinsics/gen/textureSample/51b514.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
 fn textureSample_51b514() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_51b514();
 }
diff --git a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.wgsl
index 825becd..f866a59 100644
--- a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_51b514() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_51b514();
 }
diff --git a/test/intrinsics/gen/textureSample/667d76.wgsl b/test/intrinsics/gen/textureSample/667d76.wgsl
index 73ba79a..23d98a9 100644
--- a/test/intrinsics/gen/textureSample/667d76.wgsl
+++ b/test/intrinsics/gen/textureSample/667d76.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> f32
 fn textureSample_667d76() {
   var res: f32 = textureSample(arg_0, arg_1, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_667d76();
 }
diff --git a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.wgsl
index 3e92695..d541431 100644
--- a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_667d76() {
   var res : f32 = textureSample(arg_0, arg_1, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_667d76();
 }
diff --git a/test/intrinsics/gen/textureSample/6717ca.wgsl b/test/intrinsics/gen/textureSample/6717ca.wgsl
index 35f0657..fc09cca 100644
--- a/test/intrinsics/gen/textureSample/6717ca.wgsl
+++ b/test/intrinsics/gen/textureSample/6717ca.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32) -> vec4<f32>
 fn textureSample_6717ca() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_6717ca();
 }
diff --git a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.wgsl
index 9d9e695..b767d29 100644
--- a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_6717ca() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_6717ca();
 }
diff --git a/test/intrinsics/gen/textureSample/6e64fb.wgsl b/test/intrinsics/gen/textureSample/6e64fb.wgsl
index 24a8ae7..d49bb9c 100644
--- a/test/intrinsics/gen/textureSample/6e64fb.wgsl
+++ b/test/intrinsics/gen/textureSample/6e64fb.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_1d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_1d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_1d<f32>, sampler: sampler, coords: f32) -> vec4<f32>
 fn textureSample_6e64fb() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_6e64fb();
 }
diff --git a/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.wgsl
index 7e7d7ec..4d7b6ce 100644
--- a/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_1d<f32>;
+@group(1) @binding(0) var arg_0 : texture_1d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_6e64fb() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_6e64fb();
 }
diff --git a/test/intrinsics/gen/textureSample/7c3baa.wgsl b/test/intrinsics/gen/textureSample/7c3baa.wgsl
index 6486d89..9f32596 100644
--- a/test/intrinsics/gen/textureSample/7c3baa.wgsl
+++ b/test/intrinsics/gen/textureSample/7c3baa.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<f32>
 fn textureSample_7c3baa() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_7c3baa();
 }
diff --git a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.wgsl
index 7491762..f4105d8 100644
--- a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_7c3baa() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec2<f32>(), vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_7c3baa();
 }
diff --git a/test/intrinsics/gen/textureSample/7e9ffd.wgsl b/test/intrinsics/gen/textureSample/7e9ffd.wgsl
index 3e4a681..d5242f6 100644
--- a/test/intrinsics/gen/textureSample/7e9ffd.wgsl
+++ b/test/intrinsics/gen/textureSample/7e9ffd.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: i32) -> f32
 fn textureSample_7e9ffd() {
   var res: f32 = textureSample(arg_0, arg_1, vec2<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_7e9ffd();
 }
diff --git a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.wgsl
index b570940..ba76347 100644
--- a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_7e9ffd() {
   var res : f32 = textureSample(arg_0, arg_1, vec2<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_7e9ffd();
 }
diff --git a/test/intrinsics/gen/textureSample/8522e7.wgsl b/test/intrinsics/gen/textureSample/8522e7.wgsl
index afc0646..2ac3071 100644
--- a/test/intrinsics/gen/textureSample/8522e7.wgsl
+++ b/test/intrinsics/gen/textureSample/8522e7.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: i32, offset: vec2<i32>) -> f32
 fn textureSample_8522e7() {
   var res: f32 = textureSample(arg_0, arg_1, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_8522e7();
 }
diff --git a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.wgsl
index 4133cde..a3d93c8 100644
--- a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_8522e7() {
   var res : f32 = textureSample(arg_0, arg_1, vec2<f32>(), 1, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_8522e7();
 }
diff --git a/test/intrinsics/gen/textureSample/c2f4e8.wgsl b/test/intrinsics/gen/textureSample/c2f4e8.wgsl
index cd23dcc..e6c03a1 100644
--- a/test/intrinsics/gen/textureSample/c2f4e8.wgsl
+++ b/test/intrinsics/gen/textureSample/c2f4e8.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: i32) -> f32
 fn textureSample_c2f4e8() {
   var res: f32 = textureSample(arg_0, arg_1, vec3<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_c2f4e8();
 }
diff --git a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.wgsl
index 835f3c2..0a6f332 100644
--- a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_c2f4e8() {
   var res : f32 = textureSample(arg_0, arg_1, vec3<f32>(), 1);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_c2f4e8();
 }
diff --git a/test/intrinsics/gen/textureSample/e53267.wgsl b/test/intrinsics/gen/textureSample/e53267.wgsl
index 14163e1..6ac4cd6 100644
--- a/test/intrinsics/gen/textureSample/e53267.wgsl
+++ b/test/intrinsics/gen/textureSample/e53267.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
 fn textureSample_e53267() {
   var res: vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_e53267();
 }
diff --git a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.wgsl
index 64f9da9..b1d17e7 100644
--- a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_e53267() {
   var res : vec4<f32> = textureSample(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_e53267();
 }
diff --git a/test/intrinsics/gen/textureSample/ea7030.wgsl b/test/intrinsics/gen/textureSample/ea7030.wgsl
index f36a76e..482686a 100644
--- a/test/intrinsics/gen/textureSample/ea7030.wgsl
+++ b/test/intrinsics/gen/textureSample/ea7030.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSample(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> f32
 fn textureSample_ea7030() {
   var res: f32 = textureSample(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_ea7030();
 }
diff --git a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.wgsl b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.wgsl
index 580b0b0..4fffe53 100644
--- a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSample_ea7030() {
   var res : f32 = textureSample(arg_0, arg_1, vec3<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSample_ea7030();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl
index 976b690..17b3557 100644
--- a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32>
 fn textureSampleBias_53b9f7() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_53b9f7();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.wgsl
index aaeec48..58e2030 100644
--- a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_53b9f7() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_53b9f7();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl
index e3c0a22..5a95380 100644
--- a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, bias: f32, offset: vec2<i32>) -> vec4<f32>
 fn textureSampleBias_65ac50() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_65ac50();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.wgsl
index 915c1f4..ca8e190 100644
--- a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_65ac50() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_65ac50();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl
index e7648e4..8c17b47 100644
--- a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32) -> vec4<f32>
 fn textureSampleBias_6a9113() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_6a9113();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.wgsl
index 36043aa..a5ff76e 100644
--- a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_6a9113() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_6a9113();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/80e579.wgsl b/test/intrinsics/gen/textureSampleBias/80e579.wgsl
index 37e9940..0ae5cc8 100644
--- a/test/intrinsics/gen/textureSampleBias/80e579.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/80e579.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, bias: f32) -> vec4<f32>
 fn textureSampleBias_80e579() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_80e579();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.wgsl
index 6134ecb..164c81e 100644
--- a/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_80e579() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_80e579();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl
index 145a1e9..f6f996f 100644
--- a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32, offset: vec2<i32>) -> vec4<f32>
 fn textureSampleBias_81c19a() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_81c19a();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.wgsl
index 88ef14b..2719198 100644
--- a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_81c19a() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_81c19a();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl
index 5ec074c..d70657e 100644
--- a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32>
 fn textureSampleBias_d3fa1b() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_d3fa1b();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.wgsl
index 40dc89e..7a07c30 100644
--- a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_d3fa1b() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_d3fa1b();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl
index 41c7990..b35e5a4 100644
--- a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: f32, offset: vec3<i32>) -> vec4<f32>
 fn textureSampleBias_df91bb() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1.0, vec3<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_df91bb();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.wgsl
index c361dd7..9f530da 100644
--- a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_df91bb() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1.0, vec3<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_df91bb();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl
index a2df185..408326a 100644
--- a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleBias(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: i32, bias: f32) -> vec4<f32>
 fn textureSampleBias_eed7c4() {
   var res: vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_eed7c4();
 }
diff --git a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.wgsl
index c106d85..e2c3aa7 100644
--- a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleBias_eed7c4() {
   var res : vec4<f32> = textureSampleBias(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleBias_eed7c4();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl
index 022bc66..3f6096a 100644
--- a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> f32
 fn textureSampleCompare_25fcd1() {
   var res: f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_25fcd1();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.wgsl
index 7beb7ef..532be33 100644
--- a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompare_25fcd1() {
   var res : f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_25fcd1();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl
index e943215..1c2c30c 100644
--- a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32
 fn textureSampleCompare_3a5923() {
   var res: f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_3a5923();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.wgsl
index a002ef2..eb88140 100644
--- a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompare_3a5923() {
   var res : f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_3a5923();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl
index 56bcd60..1accd53 100644
--- a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32
 fn textureSampleCompare_63fb83() {
   var res: f32 = textureSampleCompare(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_63fb83();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.wgsl
index 622f997..38e555e 100644
--- a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompare_63fb83() {
   var res : f32 = textureSampleCompare(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_63fb83();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl
index 2e77473..43552d7 100644
--- a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32, offset: vec2<i32>) -> f32
 fn textureSampleCompare_98b85c() {
   var res: f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_98b85c();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.wgsl
index 6e6b107..de96847 100644
--- a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompare_98b85c() {
   var res : f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_98b85c();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl
index cb4665c..073e25a 100644
--- a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompare(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> f32
 fn textureSampleCompare_a3ca7e() {
   var res: f32 = textureSampleCompare(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_a3ca7e();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.wgsl
index 2d8f4b1..5dc12e5 100644
--- a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompare_a3ca7e() {
   var res : f32 = textureSampleCompare(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_a3ca7e();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl
index c4aa7d7..4291866 100644
--- a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl
@@ -22,15 +22,15 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompare(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> f32
 fn textureSampleCompare_dd431d() {
   var res: f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_dd431d();
 }
diff --git a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.wgsl
index 8a292ad..f36d443 100644
--- a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompare_dd431d() {
   var res : f32 = textureSampleCompare(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompare_dd431d();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl
index 45b69ce..7cc7525 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompareLevel(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32, offset: vec2<i32>) -> f32
 fn textureSampleCompareLevel_011a8f() {
   var res: f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_011a8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_011a8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_011a8f();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.wgsl
index 9c02468..d98d813 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompareLevel_011a8f() {
   var res : f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_011a8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_011a8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_011a8f();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl
index 363ccec..21a27d8 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompareLevel(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: i32, depth_ref: f32) -> f32
 fn textureSampleCompareLevel_1116ed() {
   var res: f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_1116ed();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_1116ed();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_1116ed();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.wgsl
index aac38c8..97ee867 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompareLevel_1116ed() {
   var res : f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_1116ed();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_1116ed();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_1116ed();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl
index 21daae7..30c2867 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompareLevel(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32
 fn textureSampleCompareLevel_1568e3() {
   var res: f32 = textureSampleCompareLevel(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_1568e3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_1568e3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_1568e3();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.wgsl
index 06ad79e..ff5e88d 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompareLevel_1568e3() {
   var res : f32 = textureSampleCompareLevel(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_1568e3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_1568e3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_1568e3();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl
index 6cead7a..6a6fcee 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32
 fn textureSampleCompareLevel_2ad2b1() {
   var res: f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_2ad2b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_2ad2b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_2ad2b1();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.wgsl
index 24be312..76fe2cb 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompareLevel_2ad2b1() {
   var res : f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_2ad2b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_2ad2b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_2ad2b1();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl
index 86b87ea..02d5f74 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompareLevel(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: i32, depth_ref: f32) -> f32
 fn textureSampleCompareLevel_4cf3a2() {
   var res: f32 = textureSampleCompareLevel(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_4cf3a2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_4cf3a2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_4cf3a2();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.wgsl
index efdac05..1fb3470 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompareLevel_4cf3a2() {
   var res : f32 = textureSampleCompareLevel(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_4cf3a2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_4cf3a2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_4cf3a2();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl
index 5fc6e60..97401ce 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler_comparison;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler_comparison;
 
 // fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> f32
 fn textureSampleCompareLevel_f8121c() {
   var res: f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_f8121c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_f8121c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_f8121c();
 }
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.wgsl
index 5012e84..a63e6b3 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler_comparison;
+@group(1) @binding(1) var arg_1 : sampler_comparison;
 
 fn textureSampleCompareLevel_f8121c() {
   var res : f32 = textureSampleCompareLevel(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleCompareLevel_f8121c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleCompareLevel_f8121c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleCompareLevel_f8121c();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl
index c2abcf5..8d8aa0f 100644
--- a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32>
 fn textureSampleGrad_21402b() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_21402b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_21402b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_21402b();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.wgsl
index c2c4814..c5e185c 100644
--- a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_21402b() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_21402b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_21402b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_21402b();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl
index d615afa..5c242be 100644
--- a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32>
 fn textureSampleGrad_2ecd8f() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), 1, vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_2ecd8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_2ecd8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_2ecd8f();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.wgsl
index 4c80e96..233ce18 100644
--- a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_2ecd8f() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), 1, vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_2ecd8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_2ecd8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_2ecd8f();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl
index 54d36db..7749ccd 100644
--- a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>, offset: vec2<i32>) -> vec4<f32>
 fn textureSampleGrad_468f88() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), vec2<f32>(), vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_468f88();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_468f88();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_468f88();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.wgsl
index 510cb94..fc63b37 100644
--- a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_468f88() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), vec2<f32>(), vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_468f88();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_468f88();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_468f88();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/521263.wgsl b/test/intrinsics/gen/textureSampleGrad/521263.wgsl
index 1e5e25b..7f832e9 100644
--- a/test/intrinsics/gen/textureSampleGrad/521263.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/521263.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32>
 fn textureSampleGrad_521263() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_521263();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_521263();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_521263();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.wgsl
index a4f4403..f440117 100644
--- a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_521263() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), vec2<f32>(), vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_521263();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_521263();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_521263();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl
index a316e8c3..47a84a9 100644
--- a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32>
 fn textureSampleGrad_5312f4() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_5312f4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_5312f4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_5312f4();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.wgsl
index 2dd32a8..22507b7 100644
--- a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_5312f4() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_5312f4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_5312f4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_5312f4();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl
index 8dbecf8..cfb073f 100644
--- a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, ddx: vec2<f32>, ddy: vec2<f32>, offset: vec2<i32>) -> vec4<f32>
 fn textureSampleGrad_872f00() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), 1, vec2<f32>(), vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_872f00();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_872f00();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_872f00();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.wgsl
index ff9ca46..095fe4f 100644
--- a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_872f00() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec2<f32>(), 1, vec2<f32>(), vec2<f32>(), vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_872f00();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_872f00();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_872f00();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl
index 20546aa..e2f4c94 100644
--- a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: i32, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32>
 fn textureSampleGrad_e383db() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), 1, vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_e383db();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_e383db();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_e383db();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.wgsl
index b846790..dad5f7f 100644
--- a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_e383db() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), 1, vec3<f32>(), vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_e383db();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_e383db();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_e383db();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl
index 831a72e..aa909fa 100644
--- a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleGrad(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>, offset: vec3<i32>) -> vec4<f32>
 fn textureSampleGrad_e9a2f7() {
   var res: vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), vec3<f32>(), vec3<f32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_e9a2f7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_e9a2f7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_e9a2f7();
 }
diff --git a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.wgsl
index cbff0fa..4336d02 100644
--- a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleGrad_e9a2f7() {
   var res : vec4<f32> = textureSampleGrad(arg_0, arg_1, vec3<f32>(), vec3<f32>(), vec3<f32>(), vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleGrad_e9a2f7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleGrad_e9a2f7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleGrad_e9a2f7();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl
index 5cb8e08..421b596 100644
--- a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: i32) -> f32
 fn textureSampleLevel_02be59() {
   var res: f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_02be59();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_02be59();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_02be59();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.wgsl
index a106167..e5eb1c6 100644
--- a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_02be59() {
   var res : f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_02be59();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_02be59();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_02be59();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl
index 764c0a2..c8a3064 100644
--- a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: i32, level: f32) -> vec4<f32>
 fn textureSampleLevel_0bdd9a() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_0bdd9a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_0bdd9a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_0bdd9a();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.wgsl
index 8e83754..432273c 100644
--- a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_0bdd9a() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_0bdd9a();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_0bdd9a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_0bdd9a();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl
index 2c5bbe1..c7a2186 100644
--- a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_cube;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>, level: i32) -> f32
 fn textureSampleLevel_1b0291() {
   var res: f32 = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_1b0291();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_1b0291();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_1b0291();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.wgsl
index 3699406..8ce844e 100644
--- a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube;
+@group(1) @binding(0) var arg_0 : texture_depth_cube;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_1b0291() {
   var res : f32 = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_1b0291();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_1b0291();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_1b0291();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl
index 7ddc6dc..c7a13c2 100644
--- a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: i32, level: i32) -> f32
 fn textureSampleLevel_1bf73e() {
   var res: f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_1bf73e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_1bf73e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_1bf73e();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.wgsl
index dfd0fff..ff739ce 100644
--- a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_1bf73e() {
   var res : f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_1bf73e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_1bf73e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_1bf73e();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl
index 7f57f11..a1c1612 100644
--- a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, level: f32) -> vec4<f32>
 fn textureSampleLevel_302be4() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_302be4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_302be4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_302be4();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.wgsl
index 1fd7e8e..15af8c6 100644
--- a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_302be4() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_302be4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_302be4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_302be4();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl
index 5cdb1b7..bda5904 100644
--- a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: i32, offset: vec2<i32>) -> f32
 fn textureSampleLevel_47daa4() {
   var res: f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_47daa4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_47daa4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_47daa4();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.wgsl
index 2a7967f..28ee908 100644
--- a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_2d;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_47daa4() {
   var res : f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_47daa4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_47daa4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_47daa4();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl
index d478f65..d748cdc 100644
--- a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, offset: vec2<i32>) -> vec4<f32>
 fn textureSampleLevel_690d95() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_690d95();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_690d95();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_690d95();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.wgsl
index be08453..6584e46 100644
--- a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_690d95() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_690d95();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_690d95();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_690d95();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/979816.wgsl b/test/intrinsics/gen/textureSampleLevel/979816.wgsl
index 8de5d5e..4636091 100644
--- a/test/intrinsics/gen/textureSampleLevel/979816.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/979816.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_external;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_external;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_external, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
 fn textureSampleLevel_979816() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_979816();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_979816();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_979816();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.wgsl
index eef21a3..3d1980f 100644
--- a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_external;
+@group(1) @binding(0) var arg_0 : texture_external;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_979816() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_979816();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_979816();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_979816();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl
index 1d3a8b4..18304c8 100644
--- a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32, offset: vec3<i32>) -> vec4<f32>
 fn textureSampleLevel_9bd37b() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1.0, vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_9bd37b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_9bd37b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_9bd37b();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.wgsl
index ee5d006..081f0c3 100644
--- a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_9bd37b() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1.0, vec3<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_9bd37b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_9bd37b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_9bd37b();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl
index ac3e45a..ffb83eb 100644
--- a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d_array<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: i32, level: f32, offset: vec2<i32>) -> vec4<f32>
 fn textureSampleLevel_a4af26() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_a4af26();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_a4af26();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_a4af26();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.wgsl
index 7d4bfb0..69f8f80 100644
--- a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d_array<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_a4af26() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 1.0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_a4af26();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_a4af26();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_a4af26();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl
index dede1e3..3cf621a 100644
--- a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_3d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_3d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>
 fn textureSampleLevel_abfcc0() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_abfcc0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_abfcc0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_abfcc0();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.wgsl
index a8af47d..f8f6faf 100644
--- a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_3d<f32>;
+@group(1) @binding(0) var arg_0 : texture_3d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_abfcc0() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_abfcc0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_abfcc0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_abfcc0();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl
index 67bb4b6..bca3189 100644
--- a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_cube_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_cube_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: i32, level: i32) -> f32
 fn textureSampleLevel_ae5e39() {
   var res: f32 = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_ae5e39();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_ae5e39();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_ae5e39();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.wgsl
index de37db1..4fc5ac8 100644
--- a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_cube_array;
+@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_ae5e39() {
   var res : f32 = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1, 0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_ae5e39();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_ae5e39();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_ae5e39();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl
index d1b9b7b..07958ef 100644
--- a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_depth_2d_array;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_depth_2d_array;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: i32, level: i32, offset: vec2<i32>) -> f32
 fn textureSampleLevel_ba93b3() {
   var res: f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_ba93b3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_ba93b3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_ba93b3();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.wgsl
index 927d4c8..954891c 100644
--- a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_2d_array;
+@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_ba93b3() {
   var res : f32 = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1, 0, vec2<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_ba93b3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_ba93b3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_ba93b3();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl
index 01c67ac..9dc6e15 100644
--- a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_cube<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_cube<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>
 fn textureSampleLevel_c32df7() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_c32df7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_c32df7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_c32df7();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.wgsl
index e9fb633..2f2df13 100644
--- a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_cube<f32>;
+@group(1) @binding(0) var arg_0 : texture_cube<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_c32df7() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec3<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_c32df7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_c32df7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_c32df7();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl
index 84b92c4..f58dfd1 100644
--- a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl
@@ -22,26 +22,26 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_2d<f32>;
-[[group(1), binding(1)]] var arg_1: sampler;
+@group(1) @binding(0) var arg_0: texture_2d<f32>;
+@group(1) @binding(1) var arg_1: sampler;
 
 // fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32>
 fn textureSampleLevel_c6aca6() {
   var res: vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_c6aca6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_c6aca6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_c6aca6();
 }
diff --git a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.wgsl b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.wgsl
index 841a155..35dc735 100644
--- a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.wgsl
@@ -1,23 +1,23 @@
-[[group(1), binding(0)]] var arg_0 : texture_2d<f32>;
+@group(1) @binding(0) var arg_0 : texture_2d<f32>;
 
-[[group(1), binding(1)]] var arg_1 : sampler;
+@group(1) @binding(1) var arg_1 : sampler;
 
 fn textureSampleLevel_c6aca6() {
   var res : vec4<f32> = textureSampleLevel(arg_0, arg_1, vec2<f32>(), 1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureSampleLevel_c6aca6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureSampleLevel_c6aca6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureSampleLevel_c6aca6();
 }
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl b/test/intrinsics/gen/textureStore/05ce15.wgsl
index 9529592..8bccc96 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32float, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba32float, write>, coords: vec2<i32>, value: vec4<f32>)
 fn textureStore_05ce15() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_05ce15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_05ce15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_05ce15();
 }
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl
index 17e60e2..2627d0e 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, write>;
 
 fn textureStore_05ce15() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_05ce15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_05ce15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_05ce15();
 }
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl b/test/intrinsics/gen/textureStore/064c7f.wgsl
index 3681bb3..71130e4 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rg32float, write>;
 
 // fn textureStore(texture: texture_storage_2d<rg32float, write>, coords: vec2<i32>, value: vec4<f32>)
 fn textureStore_064c7f() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_064c7f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_064c7f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_064c7f();
 }
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl
index 126b43c..042b3af 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, write>;
 
 fn textureStore_064c7f() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_064c7f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_064c7f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_064c7f();
 }
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl b/test/intrinsics/gen/textureStore/068641.wgsl
index 7b5aa2a..7b10529 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16uint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba16uint, write>, coords: vec3<i32>, value: vec4<u32>)
 fn textureStore_068641() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_068641();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_068641();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_068641();
 }
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl
index 39b2602..5b3279a 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, write>;
 
 fn textureStore_068641() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_068641();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_068641();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_068641();
 }
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl
index a87fa55..d66614e 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<r32float, write>;
 
 // fn textureStore(texture: texture_storage_2d<r32float, write>, coords: vec2<i32>, value: vec4<f32>)
 fn textureStore_0af6b5() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_0af6b5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_0af6b5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_0af6b5();
 }
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl
index 33ce448..1e67b08 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, write>;
 
 fn textureStore_0af6b5() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_0af6b5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_0af6b5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_0af6b5();
 }
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl
index c20ffd6..4ace9a9 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16uint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba16uint, write>, coords: vec2<i32>, value: vec4<u32>)
 fn textureStore_0c3dff() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_0c3dff();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_0c3dff();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_0c3dff();
 }
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl
index ca12685..b115e07 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, write>;
 
 fn textureStore_0c3dff() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_0c3dff();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_0c3dff();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_0c3dff();
 }
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl b/test/intrinsics/gen/textureStore/102722.wgsl
index cd6394d..a096321 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<r32uint, write>;
 
 // fn textureStore(texture: texture_storage_1d<r32uint, write>, coords: i32, value: vec4<u32>)
 fn textureStore_102722() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_102722();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_102722();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_102722();
 }
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl
index cf2500f..593c342 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, write>;
 
 fn textureStore_102722() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_102722();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_102722();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_102722();
 }
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl
index 6f05f8b..922921b 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8unorm, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba8unorm, write>, coords: vec3<i32>, value: vec4<f32>)
 fn textureStore_1bbd08() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_1bbd08();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_1bbd08();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_1bbd08();
 }
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl
index 5a618ea..a775be7 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, write>;
 
 fn textureStore_1bbd08() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_1bbd08();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_1bbd08();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_1bbd08();
 }
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl
index 465f6f3..df6bca8 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32sint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<r32sint, write>, coords: vec2<i32>, array_index: i32, value: vec4<i32>)
 fn textureStore_1c02e7() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_1c02e7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_1c02e7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_1c02e7();
 }
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl
index f24449e..732759f 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, write>;
 
 fn textureStore_1c02e7() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_1c02e7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_1c02e7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_1c02e7();
 }
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl b/test/intrinsics/gen/textureStore/22d955.wgsl
index cfd3c59..716aa42 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8uint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba8uint, write>, coords: vec2<i32>, array_index: i32, value: vec4<u32>)
 fn textureStore_22d955() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_22d955();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_22d955();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_22d955();
 }
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl
index c6f0cc4..b9fe255 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, write>;
 
 fn textureStore_22d955() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_22d955();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_22d955();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_22d955();
 }
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl b/test/intrinsics/gen/textureStore/26bf70.wgsl
index 3bff728..083e62a 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32uint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba32uint, write>, coords: vec2<i32>, value: vec4<u32>)
 fn textureStore_26bf70() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_26bf70();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_26bf70();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_26bf70();
 }
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl
index 9953134..896b4f7 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, write>;
 
 fn textureStore_26bf70() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_26bf70();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_26bf70();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_26bf70();
 }
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl b/test/intrinsics/gen/textureStore/2796b4.wgsl
index c7e6cde..dce9df6 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rg32sint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rg32sint, write>, coords: vec3<i32>, value: vec4<i32>)
 fn textureStore_2796b4() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2796b4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2796b4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2796b4();
 }
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl
index 1bf6571..3fcb394 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, write>;
 
 fn textureStore_2796b4() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2796b4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2796b4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2796b4();
 }
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl
index 7480d58..35cec99 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<r32float, write>;
 
 // fn textureStore(texture: texture_storage_1d<r32float, write>, coords: i32, value: vec4<f32>)
 fn textureStore_2ac6c7() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2ac6c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2ac6c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2ac6c7();
 }
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl
index 1e8abb2..2786ca4 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, write>;
 
 fn textureStore_2ac6c7() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2ac6c7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2ac6c7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2ac6c7();
 }
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl
index e8ab6c1..ad1ccd5 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16uint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba16uint, write>, coords: i32, value: vec4<u32>)
 fn textureStore_2eb2a4() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2eb2a4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2eb2a4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2eb2a4();
 }
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl
index 038994e..51c5cd9 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, write>;
 
 fn textureStore_2eb2a4() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2eb2a4();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2eb2a4();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2eb2a4();
 }
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl
index 0fea47b..bcf4113 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8snorm, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba8snorm, write>, coords: i32, value: vec4<f32>)
 fn textureStore_2ed2a3() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2ed2a3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2ed2a3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2ed2a3();
 }
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl
index cc582b3..c415d58 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, write>;
 
 fn textureStore_2ed2a3() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_2ed2a3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_2ed2a3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_2ed2a3();
 }
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl b/test/intrinsics/gen/textureStore/31745b.wgsl
index 49bb0c1..5dea4e1 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rg32sint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rg32sint, write>, coords: vec2<i32>, value: vec4<i32>)
 fn textureStore_31745b() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_31745b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_31745b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_31745b();
 }
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl
index 41e5f93..4288434 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, write>;
 
 fn textureStore_31745b() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_31745b();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_31745b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_31745b();
 }
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl b/test/intrinsics/gen/textureStore/32f368.wgsl
index 30aef60..50f4e66 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16float, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba16float, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>)
 fn textureStore_32f368() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_32f368();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_32f368();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_32f368();
 }
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl
index 5a83522..a747822 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, write>;
 
 fn textureStore_32f368() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_32f368();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_32f368();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_32f368();
 }
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl b/test/intrinsics/gen/textureStore/331aee.wgsl
index 71b0f26..4bc9a4d 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32float, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba32float, write>, coords: vec3<i32>, value: vec4<f32>)
 fn textureStore_331aee() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_331aee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_331aee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_331aee();
 }
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl
index bf5acd4..0363260 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, write>;
 
 fn textureStore_331aee() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_331aee();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_331aee();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_331aee();
 }
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl
index e54b18b..6cfe7a0 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32uint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<r32uint, write>, coords: vec2<i32>, array_index: i32, value: vec4<u32>)
 fn textureStore_38e8d7() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_38e8d7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_38e8d7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_38e8d7();
 }
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl
index de4dbd6..28d1791 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, write>;
 
 fn textureStore_38e8d7() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_38e8d7();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_38e8d7();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_38e8d7();
 }
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl
index 169d963..92cb0bb 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16sint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba16sint, write>, coords: vec2<i32>, array_index: i32, value: vec4<i32>)
 fn textureStore_3a52ac() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_3a52ac();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_3a52ac();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_3a52ac();
 }
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl
index 07d0a6f..6fbbab0 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, write>;
 
 fn textureStore_3a52ac() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_3a52ac();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_3a52ac();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_3a52ac();
 }
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl
index 6f59945..c665a5b 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32float, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<r32float, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>)
 fn textureStore_3bb7a1() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_3bb7a1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_3bb7a1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_3bb7a1();
 }
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl
index 10d2109..ccb304d 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, write>;
 
 fn textureStore_3bb7a1() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_3bb7a1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_3bb7a1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_3bb7a1();
 }
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl b/test/intrinsics/gen/textureStore/3bec15.wgsl
index e87e1de..b56de8d 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8uint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba8uint, write>, coords: i32, value: vec4<u32>)
 fn textureStore_3bec15() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_3bec15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_3bec15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_3bec15();
 }
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl
index fe5a5ea..c594be0 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, write>;
 
 fn textureStore_3bec15() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_3bec15();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_3bec15();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_3bec15();
 }
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl b/test/intrinsics/gen/textureStore/441ba8.wgsl
index c39592d..a110f0c 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32uint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba32uint, write>, coords: vec3<i32>, value: vec4<u32>)
 fn textureStore_441ba8() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_441ba8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_441ba8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_441ba8();
 }
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl
index dfa88ea..b59255a 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, write>;
 
 fn textureStore_441ba8() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_441ba8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_441ba8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_441ba8();
 }
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl b/test/intrinsics/gen/textureStore/4fc057.wgsl
index 9f83f23..b746370 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8snorm, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba8snorm, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>)
 fn textureStore_4fc057() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_4fc057();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_4fc057();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_4fc057();
 }
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl
index 38fef89..26a0018 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
 
 fn textureStore_4fc057() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_4fc057();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_4fc057();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_4fc057();
 }
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl
index 2273a88..b9fc23d 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16sint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba16sint, write>, coords: i32, value: vec4<i32>)
 fn textureStore_5a2f8f() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_5a2f8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_5a2f8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_5a2f8f();
 }
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl
index c2711ee..13d97f4 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, write>;
 
 fn textureStore_5a2f8f() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_5a2f8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_5a2f8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_5a2f8f();
 }
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl b/test/intrinsics/gen/textureStore/60975f.wgsl
index 6a3b0f1..3408855 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8unorm, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba8unorm, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>)
 fn textureStore_60975f() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_60975f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_60975f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_60975f();
 }
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl
index 539a6fc..47cdd34 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
 
 fn textureStore_60975f() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_60975f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_60975f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_60975f();
 }
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl b/test/intrinsics/gen/textureStore/682fd6.wgsl
index e8f48ce..7d74607 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rg32uint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rg32uint, write>, coords: vec2<i32>, value: vec4<u32>)
 fn textureStore_682fd6() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_682fd6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_682fd6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_682fd6();
 }
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl
index 42bad33..20603cc 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, write>;
 
 fn textureStore_682fd6() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_682fd6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_682fd6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_682fd6();
 }
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl
index 49514f2..16dc47d 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32float, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba32float, write>, coords: i32, value: vec4<f32>)
 fn textureStore_6b75c3() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6b75c3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6b75c3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6b75c3();
 }
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl
index fbaf5e4..cd827a3 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, write>;
 
 fn textureStore_6b75c3() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6b75c3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6b75c3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6b75c3();
 }
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl
index bf79a72..95535c4 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<r32sint, write>;
 
 // fn textureStore(texture: texture_storage_1d<r32sint, write>, coords: i32, value: vec4<i32>)
 fn textureStore_6b80d2() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6b80d2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6b80d2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6b80d2();
 }
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl
index 8857fdc..e7efff2 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, write>;
 
 fn textureStore_6b80d2() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6b80d2();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6b80d2();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6b80d2();
 }
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl
index c20185f..26320a2 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<r32uint, write>;
 
 // fn textureStore(texture: texture_storage_2d<r32uint, write>, coords: vec2<i32>, value: vec4<u32>)
 fn textureStore_6cff2e() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6cff2e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6cff2e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6cff2e();
 }
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl
index cae9ed9..4f43b98 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, write>;
 
 fn textureStore_6cff2e() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6cff2e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6cff2e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6cff2e();
 }
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl b/test/intrinsics/gen/textureStore/6da692.wgsl
index 7b5727a..dd40882 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba16uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16uint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba16uint, write>, coords: vec2<i32>, array_index: i32, value: vec4<u32>)
 fn textureStore_6da692() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6da692();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6da692();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6da692();
 }
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl
index 2b21df21..2497a69 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba16uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, write>;
 
 fn textureStore_6da692() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_6da692();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_6da692();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_6da692();
 }
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl b/test/intrinsics/gen/textureStore/731349.wgsl
index f7f132a..ca0d0ef 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8unorm, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba8unorm, write>, coords: vec2<i32>, value: vec4<f32>)
 fn textureStore_731349() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_731349();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_731349();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_731349();
 }
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl
index 3488770..d5466d8 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, write>;
 
 fn textureStore_731349() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_731349();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_731349();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_731349();
 }
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl b/test/intrinsics/gen/textureStore/752da6.wgsl
index da2dca2..6310341 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32sint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba32sint, write>, coords: vec2<i32>, value: vec4<i32>)
 fn textureStore_752da6() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_752da6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_752da6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_752da6();
 }
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl
index 53b1249..e029549a8 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, write>;
 
 fn textureStore_752da6() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_752da6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_752da6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_752da6();
 }
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl
index b5e0ee6..f122e9f 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8uint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba8uint, write>, coords: vec2<i32>, value: vec4<u32>)
 fn textureStore_77c0ae() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_77c0ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_77c0ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_77c0ae();
 }
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl
index d4a7597..56cf079 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, write>;
 
 fn textureStore_77c0ae() {
   textureStore(arg_0, vec2<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_77c0ae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_77c0ae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_77c0ae();
 }
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl
index 1116e70..5b0f47b 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32sint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba32sint, write>, coords: vec2<i32>, array_index: i32, value: vec4<i32>)
 fn textureStore_7cec8d() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_7cec8d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_7cec8d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_7cec8d();
 }
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl
index 3a46878..89ed161 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, write>;
 
 fn textureStore_7cec8d() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_7cec8d();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_7cec8d();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_7cec8d();
 }
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl
index 343897b..d1d8004 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8unorm, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba8unorm, write>, coords: i32, value: vec4<f32>)
 fn textureStore_7f7fae() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_7f7fae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_7f7fae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_7f7fae();
 }
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl
index abe303f..438123c 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8unorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, write>;
 
 fn textureStore_7f7fae() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_7f7fae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_7f7fae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_7f7fae();
 }
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl b/test/intrinsics/gen/textureStore/804942.wgsl
index be1fdb6..6c76b00 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<r32sint, write>;
 
 // fn textureStore(texture: texture_storage_2d<r32sint, write>, coords: vec2<i32>, value: vec4<i32>)
 fn textureStore_804942() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_804942();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_804942();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_804942();
 }
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl
index 5a76cea..f4a325c 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, write>;
 
 fn textureStore_804942() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_804942();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_804942();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_804942();
 }
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl b/test/intrinsics/gen/textureStore/805dae.wgsl
index 489a93d..962a3ff 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8snorm, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba8snorm, write>, coords: vec2<i32>, value: vec4<f32>)
 fn textureStore_805dae() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_805dae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_805dae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_805dae();
 }
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl
index 00270ab..667452d 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, write>;
 
 fn textureStore_805dae() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_805dae();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_805dae();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_805dae();
 }
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl
index d59c929..657a679 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rg32uint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rg32uint, write>, coords: i32, value: vec4<u32>)
 fn textureStore_83bcc1() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_83bcc1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_83bcc1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_83bcc1();
 }
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl
index 1fbb4cf..f0ee863 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, write>;
 
 fn textureStore_83bcc1() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_83bcc1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_83bcc1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_83bcc1();
 }
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl b/test/intrinsics/gen/textureStore/872747.wgsl
index 8d11122..cbb964b 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rg32float, write>;
 
 // fn textureStore(texture: texture_storage_1d<rg32float, write>, coords: i32, value: vec4<f32>)
 fn textureStore_872747() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_872747();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_872747();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_872747();
 }
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl
index 94bbebc..b5c2914 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, write>;
 
 fn textureStore_872747() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_872747();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_872747();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_872747();
 }
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl b/test/intrinsics/gen/textureStore/8e0479.wgsl
index b40e3fa..98b7f8c 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32uint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba32uint, write>, coords: vec2<i32>, array_index: i32, value: vec4<u32>)
 fn textureStore_8e0479() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_8e0479();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_8e0479();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_8e0479();
 }
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl
index 42d3326..07408ae 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, write>;
 
 fn textureStore_8e0479() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_8e0479();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_8e0479();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_8e0479();
 }
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl
index f15b4db..a1298a4 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16sint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba16sint, write>, coords: vec3<i32>, value: vec4<i32>)
 fn textureStore_8f71a1() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_8f71a1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_8f71a1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_8f71a1();
 }
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl
index 3b5e2ec..9bacd31 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, write>;
 
 fn textureStore_8f71a1() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_8f71a1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_8f71a1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_8f71a1();
 }
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl b/test/intrinsics/gen/textureStore/969534.wgsl
index 55e0153..d87249f 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32sint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba32sint, write>, coords: i32, value: vec4<i32>)
 fn textureStore_969534() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_969534();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_969534();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_969534();
 }
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl
index 2890165..467cbda 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, write>;
 
 fn textureStore_969534() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_969534();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_969534();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_969534();
 }
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl
index 3698b8f..0bfd6b0 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32sint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba32sint, write>, coords: vec3<i32>, value: vec4<i32>)
 fn textureStore_9a3ecc() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_9a3ecc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_9a3ecc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_9a3ecc();
 }
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl
index 701e3d8..6fe66cb 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, write>;
 
 fn textureStore_9a3ecc() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_9a3ecc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_9a3ecc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_9a3ecc();
 }
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl
index 8d4d10f..776ac7c 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32float, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba32float, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>)
 fn textureStore_9d9cd5() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_9d9cd5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_9d9cd5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_9d9cd5();
 }
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl
index 991b513..346f010 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, write>;
 
 fn textureStore_9d9cd5() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_9d9cd5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_9d9cd5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_9d9cd5();
 }
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl
index 3e42b1a..7b643ca 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16sint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba16sint, write>, coords: vec2<i32>, value: vec4<i32>)
 fn textureStore_9e3ec5() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_9e3ec5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_9e3ec5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_9e3ec5();
 }
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl
index f4e180f..aaa8bf6 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba16sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, write>;
 
 fn textureStore_9e3ec5() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_9e3ec5();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_9e3ec5();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_9e3ec5();
 }
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl
index e973b1b..19bbe72 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rg32uint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rg32uint, write>, coords: vec3<i32>, value: vec4<u32>)
 fn textureStore_ac67aa() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_ac67aa();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_ac67aa();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_ac67aa();
 }
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl
index e382854..21d0d22 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, write>;
 
 fn textureStore_ac67aa() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_ac67aa();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_ac67aa();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_ac67aa();
 }
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl b/test/intrinsics/gen/textureStore/b706b1.wgsl
index ca942b2..6eb9f07 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8sint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba8sint, write>, coords: vec3<i32>, value: vec4<i32>)
 fn textureStore_b706b1() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_b706b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_b706b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_b706b1();
 }
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl
index a307e66..7b77dc8 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, write>;
 
 fn textureStore_b706b1() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_b706b1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_b706b1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_b706b1();
 }
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl
index 19fb864..fc16ac9 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8sint, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba8sint, write>, coords: vec2<i32>, value: vec4<i32>)
 fn textureStore_bbcb7f() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_bbcb7f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_bbcb7f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_bbcb7f();
 }
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl
index cc509cf..8c4bb4d 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, write>;
 
 fn textureStore_bbcb7f() {
   textureStore(arg_0, vec2<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_bbcb7f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_bbcb7f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_bbcb7f();
 }
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl b/test/intrinsics/gen/textureStore/be6e30.wgsl
index ab35064..4cd6834 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16float, write>;
 
 // fn textureStore(texture: texture_storage_2d<rgba16float, write>, coords: vec2<i32>, value: vec4<f32>)
 fn textureStore_be6e30() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_be6e30();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_be6e30();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_be6e30();
 }
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl
index 0b92506..3a4c747 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, write>;
 
 fn textureStore_be6e30() {
   textureStore(arg_0, vec2<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_be6e30();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_be6e30();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_be6e30();
 }
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl b/test/intrinsics/gen/textureStore/bf775c.wgsl
index 7f23172..b367132 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8sint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba8sint, write>, coords: i32, value: vec4<i32>)
 fn textureStore_bf775c() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_bf775c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_bf775c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_bf775c();
 }
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl
index c93ab8e..db5d80e 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, write>;
 
 fn textureStore_bf775c() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_bf775c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_bf775c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_bf775c();
 }
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl
index 205da55..e4cbfa9 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16float, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba16float, write>, coords: vec3<i32>, value: vec4<f32>)
 fn textureStore_c5af1e() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_c5af1e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_c5af1e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_c5af1e();
 }
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl
index 0d46ada..02c2ef8 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, write>;
 
 fn textureStore_c5af1e() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_c5af1e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_c5af1e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_c5af1e();
 }
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl b/test/intrinsics/gen/textureStore/c863be.wgsl
index 456fafc..b3d05f8 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32float, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rg32float, write>, coords: vec2<i32>, array_index: i32, value: vec4<f32>)
 fn textureStore_c863be() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_c863be();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_c863be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_c863be();
 }
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl
index 147d8be..46b5a69 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, write>;
 
 fn textureStore_c863be() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_c863be();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_c863be();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_c863be();
 }
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl
index b91a45f..29a764d 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rg32sint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rg32sint, write>, coords: i32, value: vec4<i32>)
 fn textureStore_d73b5c() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_d73b5c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_d73b5c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_d73b5c();
 }
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl
index 38b9a97..2b09cbc 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, write>;
 
 fn textureStore_d73b5c() {
   textureStore(arg_0, 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_d73b5c();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_d73b5c();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_d73b5c();
 }
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl
index f0f0039..4730c2e 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8snorm, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba8snorm, write>, coords: vec3<i32>, value: vec4<f32>)
 fn textureStore_dd7d81() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_dd7d81();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_dd7d81();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_dd7d81();
 }
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl
index e99a25f..f7f4bc1 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8snorm, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, write>;
 
 fn textureStore_dd7d81() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_dd7d81();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_dd7d81();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_dd7d81();
 }
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl b/test/intrinsics/gen/textureStore/dde364.wgsl
index b9f429d..7050247 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32uint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rg32uint, write>, coords: vec2<i32>, array_index: i32, value: vec4<u32>)
 fn textureStore_dde364() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_dde364();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_dde364();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_dde364();
 }
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl
index 87583fd..044b09d 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, write>;
 
 fn textureStore_dde364() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_dde364();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_dde364();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_dde364();
 }
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl b/test/intrinsics/gen/textureStore/e885e8.wgsl
index c1ca56a..fd0c31c 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba16float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16float, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba16float, write>, coords: i32, value: vec4<f32>)
 fn textureStore_e885e8() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_e885e8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_e885e8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_e885e8();
 }
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl
index f8dbae5..eac4ea6 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba16float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, write>;
 
 fn textureStore_e885e8() {
   textureStore(arg_0, 1, vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_e885e8();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_e885e8();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_e885e8();
 }
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl b/test/intrinsics/gen/textureStore/eb702f.wgsl
index a0410f9..283888d 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<r32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<r32float, write>;
 
 // fn textureStore(texture: texture_storage_3d<r32float, write>, coords: vec3<i32>, value: vec4<f32>)
 fn textureStore_eb702f() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_eb702f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_eb702f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_eb702f();
 }
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl
index 43e39be..c2b8653 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<r32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, write>;
 
 fn textureStore_eb702f() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_eb702f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_eb702f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_eb702f();
 }
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl
index 16711fe..db051b1 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<r32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<r32sint, write>;
 
 // fn textureStore(texture: texture_storage_3d<r32sint, write>, coords: vec3<i32>, value: vec4<i32>)
 fn textureStore_eb78b9() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_eb78b9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_eb78b9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_eb78b9();
 }
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl
index b5f9092..09472ae 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<r32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, write>;
 
 fn textureStore_eb78b9() {
   textureStore(arg_0, vec3<i32>(), vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_eb78b9();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_eb78b9();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_eb78b9();
 }
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl
index 3f431a4..b6db2d0 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rg32float, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rg32float, write>;
 
 // fn textureStore(texture: texture_storage_3d<rg32float, write>, coords: vec3<i32>, value: vec4<f32>)
 fn textureStore_ee6acc() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_ee6acc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_ee6acc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_ee6acc();
 }
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl
index f3e5b9e..8b5b0ab 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rg32float, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, write>;
 
 fn textureStore_ee6acc() {
   textureStore(arg_0, vec3<i32>(), vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_ee6acc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_ee6acc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_ee6acc();
 }
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl
index 4519ff9..51c8545 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<r32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<r32uint, write>;
 
 // fn textureStore(texture: texture_storage_3d<r32uint, write>, coords: vec3<i32>, value: vec4<u32>)
 fn textureStore_ef9f2f() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_ef9f2f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_ef9f2f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_ef9f2f();
 }
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl
index 8841b4f..72cb6d0 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<r32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, write>;
 
 fn textureStore_ef9f2f() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_ef9f2f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_ef9f2f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_ef9f2f();
 }
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl b/test/intrinsics/gen/textureStore/f8dead.wgsl
index 171a951..8cd8a24 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_3d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8uint, write>;
 
 // fn textureStore(texture: texture_storage_3d<rgba8uint, write>, coords: vec3<i32>, value: vec4<u32>)
 fn textureStore_f8dead() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_f8dead();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_f8dead();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_f8dead();
 }
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl
index a90cf4a..eabfbca 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_3d<rgba8uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, write>;
 
 fn textureStore_f8dead() {
   textureStore(arg_0, vec3<i32>(), vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_f8dead();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_f8dead();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_f8dead();
 }
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl b/test/intrinsics/gen/textureStore/f9be83.wgsl
index fb1da82..a5f5b60 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rg32sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32sint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rg32sint, write>, coords: vec2<i32>, array_index: i32, value: vec4<i32>)
 fn textureStore_f9be83() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_f9be83();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_f9be83();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_f9be83();
 }
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl
index 5aaf528..c6bb3c4 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rg32sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, write>;
 
 fn textureStore_f9be83() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_f9be83();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_f9be83();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_f9be83();
 }
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl
index 518c2fb..e8002d0 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_1d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32uint, write>;
 
 // fn textureStore(texture: texture_storage_1d<rgba32uint, write>, coords: i32, value: vec4<u32>)
 fn textureStore_fb9a8f() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_fb9a8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_fb9a8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_fb9a8f();
 }
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl
index 4c1a8a2..27aa300 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_1d<rgba32uint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, write>;
 
 fn textureStore_fb9a8f() {
   textureStore(arg_0, 1, vec4<u32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_fb9a8f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_fb9a8f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_fb9a8f();
 }
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl
index a1878e4..eefd540 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl
@@ -22,25 +22,25 @@
 // Do not modify this file directly
 ////////////////////////////////////////////////////////////////////////////////
 
-[[group(1), binding(0)]] var arg_0: texture_storage_2d_array<rgba8sint, write>;
+@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8sint, write>;
 
 // fn textureStore(texture: texture_storage_2d_array<rgba8sint, write>, coords: vec2<i32>, array_index: i32, value: vec4<i32>)
 fn textureStore_fbf53f() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_fbf53f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_fbf53f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_fbf53f();
 }
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl
index 203bf52..8ee5316 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.wgsl
@@ -1,21 +1,21 @@
-[[group(1), binding(0)]] var arg_0 : texture_storage_2d_array<rgba8sint, write>;
+@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, write>;
 
 fn textureStore_fbf53f() {
   textureStore(arg_0, vec2<i32>(), 1, vec4<i32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   textureStore_fbf53f();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   textureStore_fbf53f();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   textureStore_fbf53f();
 }
diff --git a/test/intrinsics/gen/transpose/2585cd.wgsl b/test/intrinsics/gen/transpose/2585cd.wgsl
index ad87b72..d693d25 100644
--- a/test/intrinsics/gen/transpose/2585cd.wgsl
+++ b/test/intrinsics/gen/transpose/2585cd.wgsl
@@ -28,18 +28,18 @@
   var res: mat3x4<f32> = transpose(mat4x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_2585cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_2585cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_2585cd();
 }
diff --git a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.wgsl
index acb366c..e2bcbee 100644
--- a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat3x4<f32> = transpose(mat4x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_2585cd();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_2585cd();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_2585cd();
 }
diff --git a/test/intrinsics/gen/transpose/31d679.wgsl b/test/intrinsics/gen/transpose/31d679.wgsl
index 7bfdcdc..2f5b72a 100644
--- a/test/intrinsics/gen/transpose/31d679.wgsl
+++ b/test/intrinsics/gen/transpose/31d679.wgsl
@@ -28,18 +28,18 @@
   var res: mat2x2<f32> = transpose(mat2x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_31d679();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_31d679();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_31d679();
 }
diff --git a/test/intrinsics/gen/transpose/31d679.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/31d679.wgsl.expected.wgsl
index 32d466c..f588cba 100644
--- a/test/intrinsics/gen/transpose/31d679.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/31d679.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat2x2<f32> = transpose(mat2x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_31d679();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_31d679();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_31d679();
 }
diff --git a/test/intrinsics/gen/transpose/31e37e.wgsl b/test/intrinsics/gen/transpose/31e37e.wgsl
index 4896ecb..0246329 100644
--- a/test/intrinsics/gen/transpose/31e37e.wgsl
+++ b/test/intrinsics/gen/transpose/31e37e.wgsl
@@ -28,18 +28,18 @@
   var res: mat2x4<f32> = transpose(mat4x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_31e37e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_31e37e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_31e37e();
 }
diff --git a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.wgsl
index e603075..3462f91 100644
--- a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat2x4<f32> = transpose(mat4x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_31e37e();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_31e37e();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_31e37e();
 }
diff --git a/test/intrinsics/gen/transpose/4ce359.wgsl b/test/intrinsics/gen/transpose/4ce359.wgsl
index 4f0f9f0..5f8c9cc 100644
--- a/test/intrinsics/gen/transpose/4ce359.wgsl
+++ b/test/intrinsics/gen/transpose/4ce359.wgsl
@@ -28,18 +28,18 @@
   var res: mat4x2<f32> = transpose(mat2x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_4ce359();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_4ce359();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_4ce359();
 }
diff --git a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.wgsl
index 92bc18e..a4123d5 100644
--- a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat4x2<f32> = transpose(mat2x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_4ce359();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_4ce359();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_4ce359();
 }
diff --git a/test/intrinsics/gen/transpose/4dc9a1.wgsl b/test/intrinsics/gen/transpose/4dc9a1.wgsl
index 492bef4..f98f9e2 100644
--- a/test/intrinsics/gen/transpose/4dc9a1.wgsl
+++ b/test/intrinsics/gen/transpose/4dc9a1.wgsl
@@ -28,18 +28,18 @@
   var res: mat3x2<f32> = transpose(mat2x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_4dc9a1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_4dc9a1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_4dc9a1();
 }
diff --git a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.wgsl
index 1c5ca70..9a579e0 100644
--- a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat3x2<f32> = transpose(mat2x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_4dc9a1();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_4dc9a1();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_4dc9a1();
 }
diff --git a/test/intrinsics/gen/transpose/854336.wgsl b/test/intrinsics/gen/transpose/854336.wgsl
index 88838ca..9dccf31 100644
--- a/test/intrinsics/gen/transpose/854336.wgsl
+++ b/test/intrinsics/gen/transpose/854336.wgsl
@@ -28,18 +28,18 @@
   var res: mat3x3<f32> = transpose(mat3x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_854336();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_854336();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_854336();
 }
diff --git a/test/intrinsics/gen/transpose/854336.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/854336.wgsl.expected.wgsl
index f00a06d..9eac4c0 100644
--- a/test/intrinsics/gen/transpose/854336.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/854336.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat3x3<f32> = transpose(mat3x3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_854336();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_854336();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_854336();
 }
diff --git a/test/intrinsics/gen/transpose/c1b600.wgsl b/test/intrinsics/gen/transpose/c1b600.wgsl
index cbb790f..e0fc4fc 100644
--- a/test/intrinsics/gen/transpose/c1b600.wgsl
+++ b/test/intrinsics/gen/transpose/c1b600.wgsl
@@ -28,18 +28,18 @@
   var res: mat4x4<f32> = transpose(mat4x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_c1b600();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_c1b600();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_c1b600();
 }
diff --git a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.wgsl
index 5bf3104..f391f5c 100644
--- a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat4x4<f32> = transpose(mat4x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_c1b600();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_c1b600();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_c1b600();
 }
diff --git a/test/intrinsics/gen/transpose/d8f8ba.wgsl b/test/intrinsics/gen/transpose/d8f8ba.wgsl
index ba8e6d8..a09be46 100644
--- a/test/intrinsics/gen/transpose/d8f8ba.wgsl
+++ b/test/intrinsics/gen/transpose/d8f8ba.wgsl
@@ -28,18 +28,18 @@
   var res: mat4x3<f32> = transpose(mat3x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_d8f8ba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_d8f8ba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_d8f8ba();
 }
diff --git a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.wgsl
index eef54bc..e5af1d4 100644
--- a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat4x3<f32> = transpose(mat3x4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_d8f8ba();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_d8f8ba();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_d8f8ba();
 }
diff --git a/test/intrinsics/gen/transpose/ed4bdc.wgsl b/test/intrinsics/gen/transpose/ed4bdc.wgsl
index 5b6c2ee..0ed170e 100644
--- a/test/intrinsics/gen/transpose/ed4bdc.wgsl
+++ b/test/intrinsics/gen/transpose/ed4bdc.wgsl
@@ -28,18 +28,18 @@
   var res: mat2x3<f32> = transpose(mat3x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_ed4bdc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_ed4bdc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_ed4bdc();
 }
diff --git a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.wgsl b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.wgsl
index 85faea7..462a2cf 100644
--- a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : mat2x3<f32> = transpose(mat3x2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   transpose_ed4bdc();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   transpose_ed4bdc();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   transpose_ed4bdc();
 }
diff --git a/test/intrinsics/gen/trunc/562d05.wgsl b/test/intrinsics/gen/trunc/562d05.wgsl
index b58d624..65a0b42 100644
--- a/test/intrinsics/gen/trunc/562d05.wgsl
+++ b/test/intrinsics/gen/trunc/562d05.wgsl
@@ -28,18 +28,18 @@
   var res: vec3<f32> = trunc(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_562d05();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_562d05();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_562d05();
 }
diff --git a/test/intrinsics/gen/trunc/562d05.wgsl.expected.wgsl b/test/intrinsics/gen/trunc/562d05.wgsl.expected.wgsl
index bf15812..cef9697 100644
--- a/test/intrinsics/gen/trunc/562d05.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/trunc/562d05.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec3<f32> = trunc(vec3<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_562d05();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_562d05();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_562d05();
 }
diff --git a/test/intrinsics/gen/trunc/e183aa.wgsl b/test/intrinsics/gen/trunc/e183aa.wgsl
index 4193087..186a1e9 100644
--- a/test/intrinsics/gen/trunc/e183aa.wgsl
+++ b/test/intrinsics/gen/trunc/e183aa.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = trunc(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_e183aa();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_e183aa();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_e183aa();
 }
diff --git a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.wgsl b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.wgsl
index 9524479..94e505f 100644
--- a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = trunc(vec4<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_e183aa();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_e183aa();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_e183aa();
 }
diff --git a/test/intrinsics/gen/trunc/eb83df.wgsl b/test/intrinsics/gen/trunc/eb83df.wgsl
index 665f857..4da7b28 100644
--- a/test/intrinsics/gen/trunc/eb83df.wgsl
+++ b/test/intrinsics/gen/trunc/eb83df.wgsl
@@ -28,18 +28,18 @@
   var res: f32 = trunc(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_eb83df();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_eb83df();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_eb83df();
 }
diff --git a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.wgsl b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.wgsl
index d5c576f..7392b6c 100644
--- a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : f32 = trunc(1.0);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_eb83df();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_eb83df();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_eb83df();
 }
diff --git a/test/intrinsics/gen/trunc/f370d3.wgsl b/test/intrinsics/gen/trunc/f370d3.wgsl
index a46eb93..0587914 100644
--- a/test/intrinsics/gen/trunc/f370d3.wgsl
+++ b/test/intrinsics/gen/trunc/f370d3.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = trunc(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_f370d3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_f370d3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_f370d3();
 }
diff --git a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.wgsl b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.wgsl
index 11cb91b..8393d97 100644
--- a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = trunc(vec2<f32>());
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   trunc_f370d3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   trunc_f370d3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   trunc_f370d3();
 }
diff --git a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl
index bd2aa9f..db4b36b 100644
--- a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl
+++ b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = unpack2x16float(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack2x16float_32a5cf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack2x16float_32a5cf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack2x16float_32a5cf();
 }
diff --git a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.wgsl b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.wgsl
index 768b0cd..fac9058 100644
--- a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = unpack2x16float(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack2x16float_32a5cf();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack2x16float_32a5cf();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack2x16float_32a5cf();
 }
diff --git a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl
index 4292645..0ff4ddd 100644
--- a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl
+++ b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = unpack2x16snorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack2x16snorm_b4aea6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack2x16snorm_b4aea6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack2x16snorm_b4aea6();
 }
diff --git a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.wgsl b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.wgsl
index 144bba7..a97f875 100644
--- a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = unpack2x16snorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack2x16snorm_b4aea6();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack2x16snorm_b4aea6();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack2x16snorm_b4aea6();
 }
diff --git a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl
index 0961fa6..7a5e3ad 100644
--- a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl
+++ b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl
@@ -28,18 +28,18 @@
   var res: vec2<f32> = unpack2x16unorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack2x16unorm_7699c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack2x16unorm_7699c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack2x16unorm_7699c0();
 }
diff --git a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.wgsl b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.wgsl
index b4ea311..784f95a 100644
--- a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec2<f32> = unpack2x16unorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack2x16unorm_7699c0();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack2x16unorm_7699c0();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack2x16unorm_7699c0();
 }
diff --git a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl
index 5262a7a..0692bf2 100644
--- a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl
+++ b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = unpack4x8snorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack4x8snorm_523fb3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack4x8snorm_523fb3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack4x8snorm_523fb3();
 }
diff --git a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.wgsl b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.wgsl
index a2f5337..d3baad3 100644
--- a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = unpack4x8snorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack4x8snorm_523fb3();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack4x8snorm_523fb3();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack4x8snorm_523fb3();
 }
diff --git a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl
index 2c95b9d..f0fcae3 100644
--- a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl
+++ b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl
@@ -28,18 +28,18 @@
   var res: vec4<f32> = unpack4x8unorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack4x8unorm_750c74();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack4x8unorm_750c74();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack4x8unorm_750c74();
 }
diff --git a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.wgsl b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.wgsl
index 45f934a..bfedafb 100644
--- a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.wgsl
@@ -2,18 +2,18 @@
   var res : vec4<f32> = unpack4x8unorm(1u);
 }
 
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   unpack4x8unorm_750c74();
   return vec4<f32>();
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   unpack4x8unorm_750c74();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   unpack4x8unorm_750c74();
 }
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl
index 983f114..a006547 100644
--- a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl
@@ -28,7 +28,7 @@
   workgroupBarrier();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   workgroupBarrier_a17f7f();
 }
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.wgsl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.wgsl
index 771ed9a..34db6c8 100644
--- a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   workgroupBarrier();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   workgroupBarrier_a17f7f();
 }
diff --git a/test/intrinsics/ignore/call.wgsl b/test/intrinsics/ignore/call.wgsl
index b3ff386..f7c03df 100644
--- a/test/intrinsics/ignore/call.wgsl
+++ b/test/intrinsics/ignore/call.wgsl
@@ -2,7 +2,7 @@
     return a * b + c;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     ignore(f(1, 2, 3));
 }
diff --git a/test/intrinsics/ignore/call.wgsl.expected.wgsl b/test/intrinsics/ignore/call.wgsl.expected.wgsl
index 4ab9b94..49c50c7 100644
--- a/test/intrinsics/ignore/call.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/call.wgsl.expected.wgsl
@@ -6,7 +6,7 @@
   return ((a * b) + c);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   ignore(f(1, 2, 3));
 }
diff --git a/test/intrinsics/ignore/runtime_array.wgsl b/test/intrinsics/ignore/runtime_array.wgsl
index b7cc1e7..c76ba03 100644
--- a/test/intrinsics/ignore/runtime_array.wgsl
+++ b/test/intrinsics/ignore/runtime_array.wgsl
@@ -2,9 +2,9 @@
     arr : array<i32>;
 };
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     ignore(s.arr);
 }
diff --git a/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl b/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl
index e58a70c..310405a 100644
--- a/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl
@@ -6,9 +6,9 @@
   arr : array<i32>;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   ignore(s.arr);
 }
diff --git a/test/intrinsics/ignore/storage_buffer.wgsl b/test/intrinsics/ignore/storage_buffer.wgsl
index be63c03..7243c04 100644
--- a/test/intrinsics/ignore/storage_buffer.wgsl
+++ b/test/intrinsics/ignore/storage_buffer.wgsl
@@ -2,9 +2,9 @@
     i : i32;
 };
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     ignore(s);
     ignore(s.i);
diff --git a/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl b/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl
index 0f2f5e9..4e69a8d 100644
--- a/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   i : i32;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   ignore(s);
   ignore(s.i);
diff --git a/test/intrinsics/ignore/uniform_buffer.wgsl b/test/intrinsics/ignore/uniform_buffer.wgsl
index bf92e75..860867a 100644
--- a/test/intrinsics/ignore/uniform_buffer.wgsl
+++ b/test/intrinsics/ignore/uniform_buffer.wgsl
@@ -2,9 +2,9 @@
     i : i32;
 };
 
-[[binding(0), group(0)]] var<uniform> u : S;
+@binding(0) @group(0) var<uniform> u : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     ignore(u);
     ignore(u.i);
diff --git a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl
index 72a1efe..7a25674 100644
--- a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   i : i32;
 }
 
-[[binding(0), group(0)]] var<uniform> u : S;
+@binding(0) @group(0) var<uniform> u : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   ignore(u);
   ignore(u.i);
diff --git a/test/intrinsics/intrinsics.wgsl.tmpl b/test/intrinsics/intrinsics.wgsl.tmpl
index 16f72c3..254fb16 100644
--- a/test/intrinsics/intrinsics.wgsl.tmpl
+++ b/test/intrinsics/intrinsics.wgsl.tmpl
@@ -41,7 +41,7 @@
 struct SB_RW {
 {{- $sb_rw_fields -}}
 };
-[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+@group(0) @binding(0) var<storage, read_write> sb_rw : SB_RW;
 {{    end -}}
 
 {{- /* Generate RO storage buffer parameters */ -}}
@@ -54,7 +54,7 @@
 struct SB_RO {
 {{- $sb_ro_fields -}}
 };
-[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
+@group(0) @binding(1) var<storage, read> sb_ro : SB_RO;
 {{    end -}}
 
 {{- /* Generate uniform buffer parameters */ -}}
@@ -67,7 +67,7 @@
 struct UB {
 {{- $ub_fields -}}
 };
-[[group(0), binding(1)]] var<uniform> ub : UB;
+@group(0) @binding(1) var<uniform> ub : UB;
 {{    end -}}
 
 {{- /* Generate module-scoped handle variables */ -}}
@@ -76,7 +76,7 @@
 {{-     if eq "ptr" $p.Type.Target.Name -}}
 {{-       $el_type := Eval "Type" (index $p.Type.TemplateArguments 1)}}
 {{-       if eq "handle" $class -}}
-            [[group(1), binding({{$i}})]] var arg_{{$i}}: {{$el_type}};
+            @group(1) @binding({{$i}}) var arg_{{$i}}: {{$el_type}};
 {{          $args.Put $i (printf "&arg_%v" $i) -}}
 {{-       else if eq "workgroup" $class -}}
             var<workgroup> arg_{{$i}}: {{$el_type}};
@@ -88,7 +88,7 @@
 {{-     else -}}
 {{-       $type := Eval "Type" $p.Type}}
 {{-       if eq "handle" $class -}}
-            [[group(1), binding({{$i}})]] var arg_{{$i}}: {{$type}};
+            @group(1) @binding({{$i}}) var arg_{{$i}}: {{$type}};
 {{          $args.Put $i (printf "arg_%v" $i) -}}
 {{-       else if eq "workgroup" $class -}}
             var<workgroup> arg_{{$i}}: {{$type}};
@@ -131,22 +131,22 @@
 {{/*new line*/ -}}
 
 {{- if .CanBeUsedInStage.Vertex }}
-[[stage(vertex)]]
-fn vertex_main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vertex_main() -> @builtin(position) vec4<f32> {
   {{$permutation}}();
   return vec4<f32>();
 }
 {{ end -}}
 
 {{- if .CanBeUsedInStage.Fragment }}
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   {{$permutation}}();
 }
 {{ end -}}
 
 {{- if .CanBeUsedInStage.Compute }}
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn compute_main() {
   {{$permutation}}();
 }
diff --git a/test/intrinsics/modf.wgsl b/test/intrinsics/modf.wgsl
index f8b1cf3..6991b74 100644
--- a/test/intrinsics/modf.wgsl
+++ b/test/intrinsics/modf.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     let res = modf(1.23);
     let fract : f32 = res.fract;
diff --git a/test/intrinsics/modf.wgsl.expected.wgsl b/test/intrinsics/modf.wgsl.expected.wgsl
index ba6a7c6..8e95d07 100644
--- a/test/intrinsics/modf.wgsl.expected.wgsl
+++ b/test/intrinsics/modf.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let res = modf(1.230000019);
   let fract : f32 = res.fract;
diff --git a/test/intrinsics/radians.spvasm.expected.wgsl b/test/intrinsics/radians.spvasm.expected.wgsl
index 8edc85e..1203bfe 100644
--- a/test/intrinsics/radians.spvasm.expected.wgsl
+++ b/test/intrinsics/radians.spvasm.expected.wgsl
@@ -7,7 +7,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/intrinsics/repeated_use.wgsl b/test/intrinsics/repeated_use.wgsl
index 8a5e175..0ca4cad 100644
--- a/test/intrinsics/repeated_use.wgsl
+++ b/test/intrinsics/repeated_use.wgsl
@@ -1,6 +1,6 @@
 // Check that for backends that generate intrinsic helpers, repeated use of the
 // same intrinsic overload results in single helper being generated.
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = isNormal(vec4<f32>());
     _ = isNormal(vec4<f32>(1.));
diff --git a/test/intrinsics/repeated_use.wgsl.expected.wgsl b/test/intrinsics/repeated_use.wgsl.expected.wgsl
index a654f4b..3f21e25 100644
--- a/test/intrinsics/repeated_use.wgsl.expected.wgsl
+++ b/test/intrinsics/repeated_use.wgsl.expected.wgsl
@@ -46,7 +46,7 @@
     _ = isNormal(3.);
         ^^^^^^^^
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = isNormal(vec4<f32>());
   _ = isNormal(vec4<f32>(1.0));
diff --git a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl
index d7e9e8b..f6e2411 100644
--- a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl
+++ b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl
@@ -1,4 +1,4 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 var<private> tint_symbol_1 : vec4<f32> = vec4<f32>();
 
@@ -21,11 +21,11 @@
 }
 
 struct vertex_main_out {
-  [[builtin(position)]]
+  @builtin(position)
   tint_symbol_1_1 : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vertex_main() -> vertex_main_out {
   vertex_main_1();
   return vertex_main_out(tint_symbol_1);
@@ -36,7 +36,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fragment_main_1();
 }
@@ -46,7 +46,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn compute_main() {
   compute_main_1();
 }
diff --git a/test/intrinsics/textureGather/f32/alpha.wgsl b/test/intrinsics/textureGather/f32/alpha.wgsl
index d61f99b..1336988 100644
--- a/test/intrinsics/textureGather/f32/alpha.wgsl
+++ b/test/intrinsics/textureGather/f32/alpha.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<f32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(3, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/alpha.wgsl.expected.wgsl b/test/intrinsics/textureGather/f32/alpha.wgsl.expected.wgsl
index fada6d1..3cf1392 100644
--- a/test/intrinsics/textureGather/f32/alpha.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/f32/alpha.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
+@group(1) @binding(0) var t : texture_2d<f32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(3, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/blue.wgsl b/test/intrinsics/textureGather/f32/blue.wgsl
index b8251ee..f31387b 100644
--- a/test/intrinsics/textureGather/f32/blue.wgsl
+++ b/test/intrinsics/textureGather/f32/blue.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<f32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(2, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/blue.wgsl.expected.wgsl b/test/intrinsics/textureGather/f32/blue.wgsl.expected.wgsl
index 18cc654..2512919 100644
--- a/test/intrinsics/textureGather/f32/blue.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/f32/blue.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
+@group(1) @binding(0) var t : texture_2d<f32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(2, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/green.wgsl b/test/intrinsics/textureGather/f32/green.wgsl
index f0960ce..c0574ca 100644
--- a/test/intrinsics/textureGather/f32/green.wgsl
+++ b/test/intrinsics/textureGather/f32/green.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<f32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(1, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/green.wgsl.expected.wgsl b/test/intrinsics/textureGather/f32/green.wgsl.expected.wgsl
index 778bc1c..524c0c4 100644
--- a/test/intrinsics/textureGather/f32/green.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/f32/green.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
+@group(1) @binding(0) var t : texture_2d<f32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(1, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/red.wgsl b/test/intrinsics/textureGather/f32/red.wgsl
index 89772c9..4eb8c60 100644
--- a/test/intrinsics/textureGather/f32/red.wgsl
+++ b/test/intrinsics/textureGather/f32/red.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<f32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(0, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/f32/red.wgsl.expected.wgsl b/test/intrinsics/textureGather/f32/red.wgsl.expected.wgsl
index 4853506..0524429 100644
--- a/test/intrinsics/textureGather/f32/red.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/f32/red.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<f32>;
+@group(1) @binding(0) var t : texture_2d<f32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<f32> = textureGather(0, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/alpha.wgsl b/test/intrinsics/textureGather/i32/alpha.wgsl
index d83c3ca..42133c9 100644
--- a/test/intrinsics/textureGather/i32/alpha.wgsl
+++ b/test/intrinsics/textureGather/i32/alpha.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<i32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(3, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/alpha.wgsl.expected.wgsl b/test/intrinsics/textureGather/i32/alpha.wgsl.expected.wgsl
index 206d816..35d727c 100644
--- a/test/intrinsics/textureGather/i32/alpha.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/i32/alpha.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
+@group(1) @binding(0) var t : texture_2d<i32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(3, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/blue.wgsl b/test/intrinsics/textureGather/i32/blue.wgsl
index 13275af..396dd52 100644
--- a/test/intrinsics/textureGather/i32/blue.wgsl
+++ b/test/intrinsics/textureGather/i32/blue.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<i32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(2, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/blue.wgsl.expected.wgsl b/test/intrinsics/textureGather/i32/blue.wgsl.expected.wgsl
index af7f095..116439f 100644
--- a/test/intrinsics/textureGather/i32/blue.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/i32/blue.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
+@group(1) @binding(0) var t : texture_2d<i32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(2, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/green.wgsl b/test/intrinsics/textureGather/i32/green.wgsl
index ecf2d65..ee162d1 100644
--- a/test/intrinsics/textureGather/i32/green.wgsl
+++ b/test/intrinsics/textureGather/i32/green.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<i32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(1, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/green.wgsl.expected.wgsl b/test/intrinsics/textureGather/i32/green.wgsl.expected.wgsl
index 862c644..6f75122 100644
--- a/test/intrinsics/textureGather/i32/green.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/i32/green.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
+@group(1) @binding(0) var t : texture_2d<i32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(1, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/red.wgsl b/test/intrinsics/textureGather/i32/red.wgsl
index 1516eea..60117f7 100644
--- a/test/intrinsics/textureGather/i32/red.wgsl
+++ b/test/intrinsics/textureGather/i32/red.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<i32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(0, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/i32/red.wgsl.expected.wgsl b/test/intrinsics/textureGather/i32/red.wgsl.expected.wgsl
index 7a505f6..c2552b0 100644
--- a/test/intrinsics/textureGather/i32/red.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/i32/red.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<i32>;
+@group(1) @binding(0) var t : texture_2d<i32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<i32> = textureGather(0, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/alpha.wgsl b/test/intrinsics/textureGather/u32/alpha.wgsl
index 9aeef80..adcc5fd 100644
--- a/test/intrinsics/textureGather/u32/alpha.wgsl
+++ b/test/intrinsics/textureGather/u32/alpha.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<u32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(3, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/alpha.wgsl.expected.wgsl b/test/intrinsics/textureGather/u32/alpha.wgsl.expected.wgsl
index fc21f33..496586d 100644
--- a/test/intrinsics/textureGather/u32/alpha.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/u32/alpha.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
+@group(1) @binding(0) var t : texture_2d<u32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(3, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/blue.wgsl b/test/intrinsics/textureGather/u32/blue.wgsl
index 9751b7c..30e266c 100644
--- a/test/intrinsics/textureGather/u32/blue.wgsl
+++ b/test/intrinsics/textureGather/u32/blue.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<u32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(2, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/blue.wgsl.expected.wgsl b/test/intrinsics/textureGather/u32/blue.wgsl.expected.wgsl
index 5fdeb7e..eb2c3e1 100644
--- a/test/intrinsics/textureGather/u32/blue.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/u32/blue.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
+@group(1) @binding(0) var t : texture_2d<u32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(2, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/green.wgsl b/test/intrinsics/textureGather/u32/green.wgsl
index 83edac0..5b9ae18 100644
--- a/test/intrinsics/textureGather/u32/green.wgsl
+++ b/test/intrinsics/textureGather/u32/green.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<u32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(1, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/green.wgsl.expected.wgsl b/test/intrinsics/textureGather/u32/green.wgsl.expected.wgsl
index 17b8423..935c1e2 100644
--- a/test/intrinsics/textureGather/u32/green.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/u32/green.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
+@group(1) @binding(0) var t : texture_2d<u32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(1, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/red.wgsl b/test/intrinsics/textureGather/u32/red.wgsl
index e3ca7f8..70ec158 100644
--- a/test/intrinsics/textureGather/u32/red.wgsl
+++ b/test/intrinsics/textureGather/u32/red.wgsl
@@ -1,7 +1,7 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(0) var t : texture_2d<u32>;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(0, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureGather/u32/red.wgsl.expected.wgsl b/test/intrinsics/textureGather/u32/red.wgsl.expected.wgsl
index d3b2be8..528958d 100644
--- a/test/intrinsics/textureGather/u32/red.wgsl.expected.wgsl
+++ b/test/intrinsics/textureGather/u32/red.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(1), binding(0)]] var t : texture_2d<u32>;
+@group(1) @binding(0) var t : texture_2d<u32>;
 
-[[group(1), binding(1)]] var s : sampler;
+@group(1) @binding(1) var s : sampler;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   var res : vec4<u32> = textureGather(0, t, s, vec2<f32>());
 }
diff --git a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl
index 13f9223..7590a16 100644
--- a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl
+++ b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl
@@ -1,4 +1,4 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 var<private> tint_symbol_1 : vec4<f32> = vec4<f32>();
 
@@ -21,11 +21,11 @@
 }
 
 struct vertex_main_out {
-  [[builtin(position)]]
+  @builtin(position)
   tint_symbol_1_1 : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vertex_main() -> vertex_main_out {
   vertex_main_1();
   return vertex_main_out(tint_symbol_1);
@@ -36,7 +36,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fragment_main_1();
 }
@@ -46,7 +46,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn compute_main() {
   compute_main_1();
 }
diff --git a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl
index bafa3a8..deac9d0 100644
--- a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl
+++ b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl
@@ -1,4 +1,4 @@
-[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;
+@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
 
 var<private> tint_symbol_1 : vec4<f32> = vec4<f32>();
 
@@ -21,11 +21,11 @@
 }
 
 struct vertex_main_out {
-  [[builtin(position)]]
+  @builtin(position)
   tint_symbol_1_1 : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vertex_main() -> vertex_main_out {
   vertex_main_1();
   return vertex_main_out(tint_symbol_1);
@@ -36,7 +36,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn fragment_main() {
   fragment_main_1();
 }
@@ -46,7 +46,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn compute_main() {
   compute_main_1();
 }
diff --git a/test/layout/storage/mat2x2/f32.wgsl b/test/layout/storage/mat2x2/f32.wgsl
index 2be17c3..3b2c0bf 100644
--- a/test/layout/storage/mat2x2/f32.wgsl
+++ b/test/layout/storage/mat2x2/f32.wgsl
@@ -1,9 +1,9 @@
 struct SSBO {
   m : mat2x2<f32>;
 };
-[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
+@group(0) @binding(0) var<storage, read_write> ssbo : SSBO;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     let v = ssbo.m;
     ssbo.m = v;
diff --git a/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl b/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl
index 9933db6..2cdd7f6 100644
--- a/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl
+++ b/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   m : mat2x2<f32>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
+@group(0) @binding(0) var<storage, read_write> ssbo : SSBO;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   let v = ssbo.m;
   ssbo.m = v;
diff --git a/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl b/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl
index ffb157a..a368ee1 100644
--- a/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl
+++ b/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl
@@ -1,15 +1,15 @@
 struct SSBO {
-  m : [[stride(16)]] array<vec2<f32>, 2u>;
+  m : @stride(16) array<vec2<f32>, 2u>;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
+@group(0) @binding(0) var<storage, read_write> ssbo : SSBO;
 
-fn arr_to_mat2x2_stride_16(arr : [[stride(16)]] array<vec2<f32>, 2u>) -> mat2x2<f32> {
+fn arr_to_mat2x2_stride_16(arr : @stride(16) array<vec2<f32>, 2u>) -> mat2x2<f32> {
   return mat2x2<f32>(arr[0u], arr[1u]);
 }
 
-fn mat2x2_stride_16_to_arr(mat : mat2x2<f32>) -> [[stride(16)]] array<vec2<f32>, 2u> {
-  return [[stride(16)]] array<vec2<f32>, 2u>(mat[0u], mat[1u]);
+fn mat2x2_stride_16_to_arr(mat : mat2x2<f32>) -> @stride(16) array<vec2<f32>, 2u> {
+  return @stride(16) array<vec2<f32>, 2u>(mat[0u], mat[1u]);
 }
 
 fn f_1() {
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn f() {
   f_1();
 }
diff --git a/test/let/global/global.wgsl b/test/let/global/global.wgsl
index 7928f9b..1dd906d 100644
--- a/test/let/global/global.wgsl
+++ b/test/let/global/global.wgsl
@@ -18,7 +18,7 @@
 let v8 = MyStruct();

 let v9 = MyArray();

 

-[[stage(fragment)]]

-fn main() -> [[location(0)]] vec4<f32> {

+@stage(fragment)

+fn main() -> @location(0) vec4<f32> {

     return vec4<f32>(0.0,0.0,0.0,0.0);

 }

diff --git a/test/let/global/global.wgsl.expected.wgsl b/test/let/global/global.wgsl.expected.wgsl
index 68c5ae5..60a1e36 100644
--- a/test/let/global/global.wgsl.expected.wgsl
+++ b/test/let/global/global.wgsl.expected.wgsl
@@ -22,7 +22,7 @@
 
 let v9 = MyArray();
 
-[[stage(fragment)]]
-fn main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn main() -> @location(0) vec4<f32> {
   return vec4<f32>(0.0, 0.0, 0.0, 0.0);
 }
diff --git a/test/let/inferred/function.wgsl b/test/let/inferred/function.wgsl
index 15fc9fa..cb66845 100644
--- a/test/let/inferred/function.wgsl
+++ b/test/let/inferred/function.wgsl
@@ -33,7 +33,7 @@
     let v15 = ret_MyArray();

 }

 

-[[stage(fragment)]]

-fn main() -> [[location(0)]] vec4<f32> {

+@stage(fragment)

+fn main() -> @location(0) vec4<f32> {

     return vec4<f32>(0.0,0.0,0.0,0.0);

 }

diff --git a/test/let/inferred/function.wgsl.expected.wgsl b/test/let/inferred/function.wgsl.expected.wgsl
index 4f5b69a..e2f4653 100644
--- a/test/let/inferred/function.wgsl.expected.wgsl
+++ b/test/let/inferred/function.wgsl.expected.wgsl
@@ -42,7 +42,7 @@
   let v15 = ret_MyArray();
 }
 
-[[stage(fragment)]]
-fn main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn main() -> @location(0) vec4<f32> {
   return vec4<f32>(0.0, 0.0, 0.0, 0.0);
 }
diff --git a/test/loops/continue_in_switch.wgsl b/test/loops/continue_in_switch.wgsl
index a08c7dd..b523874 100644
--- a/test/loops/continue_in_switch.wgsl
+++ b/test/loops/continue_in_switch.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     for (var i : i32 = 0; i < 4; i = i + 1) {
         switch(i) {
diff --git a/test/loops/continue_in_switch.wgsl.expected.wgsl b/test/loops/continue_in_switch.wgsl.expected.wgsl
index 0d375d4..ab9a029 100644
--- a/test/loops/continue_in_switch.wgsl.expected.wgsl
+++ b/test/loops/continue_in_switch.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   for(var i : i32 = 0; (i < 4); i = (i + 1)) {
     switch(i) {
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.wgsl b/test/ptr_ref/access/matrix.spvasm.expected.wgsl
index 54e50e7..45ab66f 100644
--- a/test/ptr_ref/access/matrix.spvasm.expected.wgsl
+++ b/test/ptr_ref/access/matrix.spvasm.expected.wgsl
@@ -5,7 +5,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/access/matrix.wgsl b/test/ptr_ref/access/matrix.wgsl
index 1347133..a085846 100644
--- a/test/ptr_ref/access/matrix.wgsl
+++ b/test/ptr_ref/access/matrix.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(1., 2., 3.), vec3<f32>(4., 5., 6.), vec3<f32>(7., 8., 9.));
   let v : ptr<function, vec3<f32>> = &m[1];
diff --git a/test/ptr_ref/access/matrix.wgsl.expected.wgsl b/test/ptr_ref/access/matrix.wgsl.expected.wgsl
index 8356471..110e6e6 100644
--- a/test/ptr_ref/access/matrix.wgsl.expected.wgsl
+++ b/test/ptr_ref/access/matrix.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
   let v : ptr<function, vec3<f32>> = &(m[1]);
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl
index 512d5c8..82d9c5a 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl
@@ -5,7 +5,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.wgsl b/test/ptr_ref/load/global/i32.spvasm.expected.wgsl
index 2f193e8..fa2c115 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.wgsl
@@ -6,7 +6,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/load/global/i32.wgsl b/test/ptr_ref/load/global/i32.wgsl
index b0e73b6..4f620cf 100644
--- a/test/ptr_ref/load/global/i32.wgsl
+++ b/test/ptr_ref/load/global/i32.wgsl
@@ -1,6 +1,6 @@
 var<private> I : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let i : i32 = I;
   let use : i32 = i + 1;
diff --git a/test/ptr_ref/load/global/i32.wgsl.expected.wgsl b/test/ptr_ref/load/global/i32.wgsl.expected.wgsl
index e3d286d..5e1feea 100644
--- a/test/ptr_ref/load/global/i32.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/global/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> I : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let i : i32 = I;
   let use : i32 = (i + 1);
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
index 67eba57..6d6d8e6 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
@@ -11,7 +11,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/load/global/struct_field.wgsl b/test/ptr_ref/load/global/struct_field.wgsl
index 074fe80..e4341ca 100644
--- a/test/ptr_ref/load/global/struct_field.wgsl
+++ b/test/ptr_ref/load/global/struct_field.wgsl
@@ -4,7 +4,7 @@
 
 var<private> V : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let i : i32 = V.i;
 }
diff --git a/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl b/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl
index d0b3e34..59395f9 100644
--- a/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
 
 var<private> V : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let i : i32 = V.i;
 }
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.wgsl b/test/ptr_ref/load/local/i32.spvasm.expected.wgsl
index 89d3a08..22952b8 100644
--- a/test/ptr_ref/load/local/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.wgsl
@@ -6,7 +6,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/load/local/i32.wgsl b/test/ptr_ref/load/local/i32.wgsl
index f01042b..6c30f81 100644
--- a/test/ptr_ref/load/local/i32.wgsl
+++ b/test/ptr_ref/load/local/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let use : i32 = i + 1;
diff --git a/test/ptr_ref/load/local/i32.wgsl.expected.wgsl b/test/ptr_ref/load/local/i32.wgsl.expected.wgsl
index d08fa3d..587375e 100644
--- a/test/ptr_ref/load/local/i32.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let use : i32 = (i + 1);
diff --git a/test/ptr_ref/load/local/ptr_function.wgsl b/test/ptr_ref/load/local/ptr_function.wgsl
index df53774..ddaafb2 100644
--- a/test/ptr_ref/load/local/ptr_function.wgsl
+++ b/test/ptr_ref/load/local/ptr_function.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let p : ptr<function, i32> = &i;
diff --git a/test/ptr_ref/load/local/ptr_function.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_function.wgsl.expected.wgsl
index 4bd46dd..e29289c 100644
--- a/test/ptr_ref/load/local/ptr_function.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_function.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let p : ptr<function, i32> = &(i);
diff --git a/test/ptr_ref/load/local/ptr_private.wgsl b/test/ptr_ref/load/local/ptr_private.wgsl
index b9d231f..0f59ad5 100644
--- a/test/ptr_ref/load/local/ptr_private.wgsl
+++ b/test/ptr_ref/load/local/ptr_private.wgsl
@@ -1,6 +1,6 @@
 var<private> i : i32 = 123;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<private, i32> = &i;
   let use : i32 = *p + 1;
diff --git a/test/ptr_ref/load/local/ptr_private.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_private.wgsl.expected.wgsl
index 4c92811..9b77f46 100644
--- a/test/ptr_ref/load/local/ptr_private.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_private.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> i : i32 = 123;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<private, i32> = &(i);
   let use : i32 = (*(p) + 1);
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl b/test/ptr_ref/load/local/ptr_storage.wgsl
index 1b1bfba..e50f835 100644
--- a/test/ptr_ref/load/local/ptr_storage.wgsl
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl
@@ -2,10 +2,10 @@
   a : i32;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, read_write> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<storage, i32, read_write> = &v.a;
   let use : i32 = *p + 1;
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl
index 3111c5f..ecef085 100644
--- a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : i32;
 }
 
-[[group(0), binding(0)]] var<storage, read_write> v : S;
+@group(0) @binding(0) var<storage, read_write> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<storage, i32, read_write> = &(v.a);
   let use : i32 = (*(p) + 1);
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl b/test/ptr_ref/load/local/ptr_uniform.wgsl
index 1d0e355..49328ac 100644
--- a/test/ptr_ref/load/local/ptr_uniform.wgsl
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl
@@ -2,10 +2,10 @@
   a : i32;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<uniform> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<uniform, i32> = &v.a;
   let use : i32 = *p + 1;
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl
index b6f8628..dabfd63 100644
--- a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   a : i32;
 }
 
-[[group(0), binding(0)]] var<uniform> v : S;
+@group(0) @binding(0) var<uniform> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let p : ptr<uniform, i32> = &(v.a);
   let use : i32 = (*(p) + 1);
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl b/test/ptr_ref/load/local/ptr_workgroup.wgsl
index eb7dae9..269caa5 100644
--- a/test/ptr_ref/load/local/ptr_workgroup.wgsl
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> i : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   i = 123;
   let p : ptr<workgroup, i32> = &i;
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.wgsl
index cf84d58..39ea1f5 100644
--- a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> i : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   i = 123;
   let p : ptr<workgroup, i32> = &(i);
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl b/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
index ea14750..9b15ec1 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
@@ -10,7 +10,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/load/local/struct_field.wgsl b/test/ptr_ref/load/local/struct_field.wgsl
index 18aca63..60b9af5 100644
--- a/test/ptr_ref/load/local/struct_field.wgsl
+++ b/test/ptr_ref/load/local/struct_field.wgsl
@@ -2,7 +2,7 @@
   i : i32;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var V : S;
   var i : i32 = V.i;
diff --git a/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl b/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl
index 7bbcb5a..056bf95 100644
--- a/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   i : i32;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var V : S;
   var i : i32 = V.i;
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl b/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl
index 05c17cf..e8df997 100644
--- a/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl
@@ -11,7 +11,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/load/param/ptr.wgsl b/test/ptr_ref/load/param/ptr.wgsl
index 3348240..1dfc928 100644
--- a/test/ptr_ref/load/param/ptr.wgsl
+++ b/test/ptr_ref/load/param/ptr.wgsl
@@ -2,7 +2,7 @@
   return value + *pointer;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let r : i32 = func(i, &i);
diff --git a/test/ptr_ref/load/param/ptr.wgsl.expected.wgsl b/test/ptr_ref/load/param/ptr.wgsl.expected.wgsl
index 812dfea..68c51db 100644
--- a/test/ptr_ref/load/param/ptr.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/param/ptr.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   return (value + *(pointer));
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let r : i32 = func(i, &(i));
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.wgsl b/test/ptr_ref/store/global/i32.spvasm.expected.wgsl
index b48aa90..d50fc89 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.wgsl
@@ -6,7 +6,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/store/global/i32.wgsl b/test/ptr_ref/store/global/i32.wgsl
index 9254513..3a5c72e 100644
--- a/test/ptr_ref/store/global/i32.wgsl
+++ b/test/ptr_ref/store/global/i32.wgsl
@@ -1,6 +1,6 @@
 var<private> I : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   I = 123; // constant
   I = 100 + 20 + 3; // dynamic
diff --git a/test/ptr_ref/store/global/i32.wgsl.expected.wgsl b/test/ptr_ref/store/global/i32.wgsl.expected.wgsl
index 8b8367d..807c1cd 100644
--- a/test/ptr_ref/store/global/i32.wgsl.expected.wgsl
+++ b/test/ptr_ref/store/global/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> I : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   I = 123;
   I = ((100 + 20) + 3);
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
index e70b574..7ed0977 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
@@ -9,7 +9,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.wgsl b/test/ptr_ref/store/local/i32.spvasm.expected.wgsl
index 64f3744..822c64b 100644
--- a/test/ptr_ref/store/local/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.wgsl
@@ -6,7 +6,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/store/local/i32.wgsl b/test/ptr_ref/store/local/i32.wgsl
index 77578a7..ea390b9 100644
--- a/test/ptr_ref/store/local/i32.wgsl
+++ b/test/ptr_ref/store/local/i32.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let p : ptr<function, i32> = &i;
diff --git a/test/ptr_ref/store/local/i32.wgsl.expected.wgsl b/test/ptr_ref/store/local/i32.wgsl.expected.wgsl
index 2690a1a..c5f03d5 100644
--- a/test/ptr_ref/store/local/i32.wgsl.expected.wgsl
+++ b/test/ptr_ref/store/local/i32.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   let p : ptr<function, i32> = &(i);
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl b/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
index b3b95df..bcc1680 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
@@ -8,7 +8,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl b/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl
index 30fdea1..c505b66 100644
--- a/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl
@@ -10,7 +10,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/ptr_ref/store/param/ptr.wgsl b/test/ptr_ref/store/param/ptr.wgsl
index f4225f0..b23ad6f 100644
--- a/test/ptr_ref/store/param/ptr.wgsl
+++ b/test/ptr_ref/store/param/ptr.wgsl
@@ -2,7 +2,7 @@
   *pointer = value;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   func(123, &i);
diff --git a/test/ptr_ref/store/param/ptr.wgsl.expected.wgsl b/test/ptr_ref/store/param/ptr.wgsl.expected.wgsl
index 05d2d40..d9d6dbb 100644
--- a/test/ptr_ref/store/param/ptr.wgsl.expected.wgsl
+++ b/test/ptr_ref/store/param/ptr.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   *(pointer) = value;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var i : i32 = 123;
   func(123, &(i));
diff --git a/test/samples/compute_boids.wgsl b/test/samples/compute_boids.wgsl
index 53ea4c5..269ac5d 100644
--- a/test/samples/compute_boids.wgsl
+++ b/test/samples/compute_boids.wgsl
@@ -14,11 +14,11 @@
 
 // vertex shader
 
-[[stage(vertex)]]
-fn vert_main([[location(0)]] a_particlePos : vec2<f32>,
-             [[location(1)]] a_particleVel : vec2<f32>,
-             [[location(2)]] a_pos : vec2<f32>)
-          -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vert_main(@location(0) a_particlePos : vec2<f32>,
+             @location(1) a_particleVel : vec2<f32>,
+             @location(2) a_pos : vec2<f32>)
+          -> @builtin(position) vec4<f32> {
   var angle : f32 = -atan2(a_particleVel.x, a_particleVel.y);
   var pos : vec2<f32> = vec2<f32>(
       (a_pos.x * cos(angle)) - (a_pos.y * sin(angle)),
@@ -28,8 +28,8 @@
 
 // fragment shader
 
-[[stage(fragment)]]
-fn frag_main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main() -> @location(0) vec4<f32> {
   return vec4<f32>(1.0, 1.0, 1.0, 1.0);
 }
 
@@ -53,14 +53,14 @@
   particles : array<Particle, 5>;
 };
 
-[[binding(0), group(0)]] var<uniform> params : SimParams;
-[[binding(1), group(0)]] var<storage, read_write> particlesA : Particles;
-[[binding(2), group(0)]] var<storage, read_write> particlesB : Particles;
+@binding(0) @group(0) var<uniform> params : SimParams;
+@binding(1) @group(0) var<storage, read_write> particlesA : Particles;
+@binding(2) @group(0) var<storage, read_write> particlesB : Particles;
 
 // https://github.com/austinEng/Project6-Vulkan-Flocking/blob/master/data/shaders/computeparticles/particle.comp
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn comp_main(
-  [[builtin(global_invocation_id)]] gl_GlobalInvocationID : vec3<u32>) {
+  @builtin(global_invocation_id) gl_GlobalInvocationID : vec3<u32>) {
   var index : u32 = gl_GlobalInvocationID.x;
   if (index >= 5u) {
     return;
diff --git a/test/samples/compute_boids.wgsl.expected.wgsl b/test/samples/compute_boids.wgsl.expected.wgsl
index 394631c..5abf9fa 100644
--- a/test/samples/compute_boids.wgsl.expected.wgsl
+++ b/test/samples/compute_boids.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
-[[stage(vertex)]]
-fn vert_main([[location(0)]] a_particlePos : vec2<f32>, [[location(1)]] a_particleVel : vec2<f32>, [[location(2)]] a_pos : vec2<f32>) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vert_main(@location(0) a_particlePos : vec2<f32>, @location(1) a_particleVel : vec2<f32>, @location(2) a_pos : vec2<f32>) -> @builtin(position) vec4<f32> {
   var angle : f32 = -(atan2(a_particleVel.x, a_particleVel.y));
   var pos : vec2<f32> = vec2<f32>(((a_pos.x * cos(angle)) - (a_pos.y * sin(angle))), ((a_pos.x * sin(angle)) + (a_pos.y * cos(angle))));
   return vec4<f32>((pos + a_particlePos), 0.0, 1.0);
 }
 
-[[stage(fragment)]]
-fn frag_main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main() -> @location(0) vec4<f32> {
   return vec4<f32>(1.0, 1.0, 1.0, 1.0);
 }
 
@@ -29,14 +29,14 @@
   particles : array<Particle, 5>;
 }
 
-[[binding(0), group(0)]] var<uniform> params : SimParams;
+@binding(0) @group(0) var<uniform> params : SimParams;
 
-[[binding(1), group(0)]] var<storage, read_write> particlesA : Particles;
+@binding(1) @group(0) var<storage, read_write> particlesA : Particles;
 
-[[binding(2), group(0)]] var<storage, read_write> particlesB : Particles;
+@binding(2) @group(0) var<storage, read_write> particlesB : Particles;
 
-[[stage(compute), workgroup_size(1)]]
-fn comp_main([[builtin(global_invocation_id)]] gl_GlobalInvocationID : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn comp_main(@builtin(global_invocation_id) gl_GlobalInvocationID : vec3<u32>) {
   var index : u32 = gl_GlobalInvocationID.x;
   if ((index >= 5u)) {
     return;
diff --git a/test/samples/cube.wgsl b/test/samples/cube.wgsl
index 5b9fab1..93519e4 100644
--- a/test/samples/cube.wgsl
+++ b/test/samples/cube.wgsl
@@ -17,19 +17,19 @@
   modelViewProjectionMatrix : mat4x4<f32>;
 };
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
 struct VertexInput {
-  [[location(0)]] cur_position : vec4<f32>;
-  [[location(1)]] color : vec4<f32>;
+  @location(0) cur_position : vec4<f32>;
+  @location(1) color : vec4<f32>;
 };
 
 struct VertexOutput {
-  [[location(0)]] vtxFragColor : vec4<f32>;
-  [[builtin(position)]] Position : vec4<f32>;
+  @location(0) vtxFragColor : vec4<f32>;
+  @builtin(position) Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vtx_main(input : VertexInput) -> VertexOutput {
   var output : VertexOutput;
   output.Position = uniforms.modelViewProjectionMatrix * input.cur_position;
@@ -39,8 +39,8 @@
 
 // Fragment shader
 
-[[stage(fragment)]]
-fn frag_main([[location(0)]] fragColor : vec4<f32>)
-          -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main(@location(0) fragColor : vec4<f32>)
+          -> @location(0) vec4<f32> {
   return fragColor;
 }
diff --git a/test/samples/cube.wgsl.expected.wgsl b/test/samples/cube.wgsl.expected.wgsl
index a764703..ba0371f 100644
--- a/test/samples/cube.wgsl.expected.wgsl
+++ b/test/samples/cube.wgsl.expected.wgsl
@@ -2,23 +2,23 @@
   modelViewProjectionMatrix : mat4x4<f32>;
 }
 
-[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
+@binding(0) @group(0) var<uniform> uniforms : Uniforms;
 
 struct VertexInput {
-  [[location(0)]]
+  @location(0)
   cur_position : vec4<f32>;
-  [[location(1)]]
+  @location(1)
   color : vec4<f32>;
 }
 
 struct VertexOutput {
-  [[location(0)]]
+  @location(0)
   vtxFragColor : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   Position : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vtx_main(input : VertexInput) -> VertexOutput {
   var output : VertexOutput;
   output.Position = (uniforms.modelViewProjectionMatrix * input.cur_position);
@@ -26,7 +26,7 @@
   return output;
 }
 
-[[stage(fragment)]]
-fn frag_main([[location(0)]] fragColor : vec4<f32>) -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main(@location(0) fragColor : vec4<f32>) -> @location(0) vec4<f32> {
   return fragColor;
 }
diff --git a/test/samples/function.wgsl b/test/samples/function.wgsl
index 257a664..92ffb04 100644
--- a/test/samples/function.wgsl
+++ b/test/samples/function.wgsl
@@ -16,6 +16,6 @@
     return ((2. * 3.) - 4.) / 5.;
 }
 
-[[stage(compute), workgroup_size(2)]]
+@stage(compute) @workgroup_size(2)
 fn ep() {
 }
diff --git a/test/samples/function.wgsl.expected.wgsl b/test/samples/function.wgsl.expected.wgsl
index 4cd4fb6..5a3a80c 100644
--- a/test/samples/function.wgsl.expected.wgsl
+++ b/test/samples/function.wgsl.expected.wgsl
@@ -2,6 +2,6 @@
   return (((2.0 * 3.0) - 4.0) / 5.0);
 }
 
-[[stage(compute), workgroup_size(2)]]
+@stage(compute) @workgroup_size(2)
 fn ep() {
 }
diff --git a/test/samples/simple.wgsl b/test/samples/simple.wgsl
index bec6a0f..d30b8a0 100644
--- a/test/samples/simple.wgsl
+++ b/test/samples/simple.wgsl
@@ -15,8 +15,8 @@
 fn bar() {
 }
 
-[[stage(fragment)]]
-fn main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn main() -> @location(0) vec4<f32> {
     var a : vec2<f32> = vec2<f32>();
     bar();
     return vec4<f32>(0.4, 0.4, 0.8, 1.0);
diff --git a/test/samples/simple.wgsl.expected.wgsl b/test/samples/simple.wgsl.expected.wgsl
index b5a4dc0..83388f8 100644
--- a/test/samples/simple.wgsl.expected.wgsl
+++ b/test/samples/simple.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 fn bar() {
 }
 
-[[stage(fragment)]]
-fn main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn main() -> @location(0) vec4<f32> {
   var a : vec2<f32> = vec2<f32>();
   bar();
   return vec4<f32>(0.400000006, 0.400000006, 0.800000012, 1.0);
diff --git a/test/samples/simple_vertex.spvasm.expected.wgsl b/test/samples/simple_vertex.spvasm.expected.wgsl
index 372bb24..91ccaf9 100644
--- a/test/samples/simple_vertex.spvasm.expected.wgsl
+++ b/test/samples/simple_vertex.spvasm.expected.wgsl
@@ -6,11 +6,11 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> main_out {
   main_1();
   return main_out(gl_Position);
diff --git a/test/samples/triangle.wgsl b/test/samples/triangle.wgsl
index ba3cb52..69d2281 100644
--- a/test/samples/triangle.wgsl
+++ b/test/samples/triangle.wgsl
@@ -18,14 +18,14 @@
     vec2<f32>(-0.5, -0.5),
     vec2<f32>(0.5, -0.5));
 
-[[stage(vertex)]]
-fn vtx_main([[builtin(vertex_index)]] VertexIndex : u32)
-         -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vtx_main(@builtin(vertex_index) VertexIndex : u32)
+         -> @builtin(position) vec4<f32> {
   return vec4<f32>(pos[VertexIndex], 0.0, 1.0);
 }
 
 // Fragment shader
-[[stage(fragment)]]
-fn frag_main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main() -> @location(0) vec4<f32> {
   return vec4<f32>(1.0, 0.0, 0.0, 1.0);
 }
diff --git a/test/samples/triangle.wgsl.expected.wgsl b/test/samples/triangle.wgsl.expected.wgsl
index bd398e0..c92f0a6 100644
--- a/test/samples/triangle.wgsl.expected.wgsl
+++ b/test/samples/triangle.wgsl.expected.wgsl
@@ -1,11 +1,11 @@
 let pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(vec2<f32>(0.0, 0.5), vec2<f32>(-0.5, -0.5), vec2<f32>(0.5, -0.5));
 
-[[stage(vertex)]]
-fn vtx_main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn vtx_main(@builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4<f32> {
   return vec4<f32>(pos[VertexIndex], 0.0, 1.0);
 }
 
-[[stage(fragment)]]
-fn frag_main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn frag_main() -> @location(0) vec4<f32> {
   return vec4<f32>(1.0, 0.0, 0.0, 1.0);
 }
diff --git a/test/shader_io/compute_input_builtins.wgsl b/test/shader_io/compute_input_builtins.wgsl
index 016ec31..77f209e 100644
--- a/test/shader_io/compute_input_builtins.wgsl
+++ b/test/shader_io/compute_input_builtins.wgsl
@@ -1,10 +1,10 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main(
-  [[builtin(local_invocation_id)]] local_invocation_id : vec3<u32>,
-  [[builtin(local_invocation_index)]] local_invocation_index : u32,
-  [[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>,
-  [[builtin(workgroup_id)]] workgroup_id : vec3<u32>,
-  [[builtin(num_workgroups)]] num_workgroups : vec3<u32>,
+  @builtin(local_invocation_id) local_invocation_id : vec3<u32>,
+  @builtin(local_invocation_index) local_invocation_index : u32,
+  @builtin(global_invocation_id) global_invocation_id : vec3<u32>,
+  @builtin(workgroup_id) workgroup_id : vec3<u32>,
+  @builtin(num_workgroups) num_workgroups : vec3<u32>,
 ) {
   let foo : u32 =
     local_invocation_id.x +
diff --git a/test/shader_io/compute_input_builtins.wgsl.expected.wgsl b/test/shader_io/compute_input_builtins.wgsl.expected.wgsl
index 42c8adb..a1d3163 100644
--- a/test/shader_io/compute_input_builtins.wgsl.expected.wgsl
+++ b/test/shader_io/compute_input_builtins.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
-fn main([[builtin(local_invocation_id)]] local_invocation_id : vec3<u32>, [[builtin(local_invocation_index)]] local_invocation_index : u32, [[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>, [[builtin(workgroup_id)]] workgroup_id : vec3<u32>, [[builtin(num_workgroups)]] num_workgroups : vec3<u32>) {
+@stage(compute) @workgroup_size(1)
+fn main(@builtin(local_invocation_id) local_invocation_id : vec3<u32>, @builtin(local_invocation_index) local_invocation_index : u32, @builtin(global_invocation_id) global_invocation_id : vec3<u32>, @builtin(workgroup_id) workgroup_id : vec3<u32>, @builtin(num_workgroups) num_workgroups : vec3<u32>) {
   let foo : u32 = ((((local_invocation_id.x + local_invocation_index) + global_invocation_id.x) + workgroup_id.x) + num_workgroups.x);
 }
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl b/test/shader_io/compute_input_builtins_struct.wgsl
index c9691c9..968a1fa 100644
--- a/test/shader_io/compute_input_builtins_struct.wgsl
+++ b/test/shader_io/compute_input_builtins_struct.wgsl
@@ -1,12 +1,12 @@
 struct ComputeInputs {
-  [[builtin(local_invocation_id)]] local_invocation_id : vec3<u32>;
-  [[builtin(local_invocation_index)]] local_invocation_index : u32;
-  [[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>;
-  [[builtin(workgroup_id)]] workgroup_id : vec3<u32>;
-  [[builtin(num_workgroups)]] num_workgroups : vec3<u32>;
+  @builtin(local_invocation_id) local_invocation_id : vec3<u32>;
+  @builtin(local_invocation_index) local_invocation_index : u32;
+  @builtin(global_invocation_id) global_invocation_id : vec3<u32>;
+  @builtin(workgroup_id) workgroup_id : vec3<u32>;
+  @builtin(num_workgroups) num_workgroups : vec3<u32>;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main(inputs : ComputeInputs) {
   let foo : u32 =
     inputs.local_invocation_id.x +
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl b/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl
index c3830ee..08660cc 100644
--- a/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl
@@ -1,17 +1,17 @@
 struct ComputeInputs {
-  [[builtin(local_invocation_id)]]
+  @builtin(local_invocation_id)
   local_invocation_id : vec3<u32>;
-  [[builtin(local_invocation_index)]]
+  @builtin(local_invocation_index)
   local_invocation_index : u32;
-  [[builtin(global_invocation_id)]]
+  @builtin(global_invocation_id)
   global_invocation_id : vec3<u32>;
-  [[builtin(workgroup_id)]]
+  @builtin(workgroup_id)
   workgroup_id : vec3<u32>;
-  [[builtin(num_workgroups)]]
+  @builtin(num_workgroups)
   num_workgroups : vec3<u32>;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main(inputs : ComputeInputs) {
   let foo : u32 = ((((inputs.local_invocation_id.x + inputs.local_invocation_index) + inputs.global_invocation_id.x) + inputs.workgroup_id.x) + inputs.num_workgroups.x);
 }
diff --git a/test/shader_io/compute_input_mixed.wgsl b/test/shader_io/compute_input_mixed.wgsl
index e49303c..b46ff00 100644
--- a/test/shader_io/compute_input_mixed.wgsl
+++ b/test/shader_io/compute_input_mixed.wgsl
@@ -1,20 +1,20 @@
 struct ComputeInputs0 {
-  [[builtin(local_invocation_id)]] local_invocation_id : vec3<u32>;
+  @builtin(local_invocation_id) local_invocation_id : vec3<u32>;
 };
 struct ComputeInputs1 {
-  [[builtin(workgroup_id)]] workgroup_id : vec3<u32>;
+  @builtin(workgroup_id) workgroup_id : vec3<u32>;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main(
   inputs0 : ComputeInputs0,
-  [[builtin(local_invocation_index)]] local_invocation_index : u32,
-  [[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>,
+  @builtin(local_invocation_index) local_invocation_index : u32,
+  @builtin(global_invocation_id) global_invocation_id : vec3<u32>,
   inputs1 : ComputeInputs1,
 ) {
   let foo : u32 =
     inputs0.local_invocation_id.x +
-    local_invocation_index + 
-    global_invocation_id.x + 
+    local_invocation_index +
+    global_invocation_id.x +
     inputs1.workgroup_id.x;
 }
diff --git a/test/shader_io/compute_input_mixed.wgsl.expected.wgsl b/test/shader_io/compute_input_mixed.wgsl.expected.wgsl
index 369ae7f..56cd363 100644
--- a/test/shader_io/compute_input_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/compute_input_mixed.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct ComputeInputs0 {
-  [[builtin(local_invocation_id)]]
+  @builtin(local_invocation_id)
   local_invocation_id : vec3<u32>;
 }
 
 struct ComputeInputs1 {
-  [[builtin(workgroup_id)]]
+  @builtin(workgroup_id)
   workgroup_id : vec3<u32>;
 }
 
-[[stage(compute), workgroup_size(1)]]
-fn main(inputs0 : ComputeInputs0, [[builtin(local_invocation_index)]] local_invocation_index : u32, [[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>, inputs1 : ComputeInputs1) {
+@stage(compute) @workgroup_size(1)
+fn main(inputs0 : ComputeInputs0, @builtin(local_invocation_index) local_invocation_index : u32, @builtin(global_invocation_id) global_invocation_id : vec3<u32>, inputs1 : ComputeInputs1) {
   let foo : u32 = (((inputs0.local_invocation_id.x + local_invocation_index) + global_invocation_id.x) + inputs1.workgroup_id.x);
 }
diff --git a/test/shader_io/fragment_input_builtins.wgsl b/test/shader_io/fragment_input_builtins.wgsl
index 0395bfd..db717eb 100644
--- a/test/shader_io/fragment_input_builtins.wgsl
+++ b/test/shader_io/fragment_input_builtins.wgsl
@@ -1,9 +1,9 @@
-[[stage(fragment)]]
+@stage(fragment)
 fn main(
-  [[builtin(position)]] position : vec4<f32>,
-  [[builtin(front_facing)]] front_facing : bool,
-  [[builtin(sample_index)]] sample_index : u32,
-  [[builtin(sample_mask)]] sample_mask : u32,
+  @builtin(position) position : vec4<f32>,
+  @builtin(front_facing) front_facing : bool,
+  @builtin(sample_index) sample_index : u32,
+  @builtin(sample_mask) sample_mask : u32,
 ) {
   if (front_facing) {
     let foo : vec4<f32> = position;
diff --git a/test/shader_io/fragment_input_builtins.wgsl.expected.wgsl b/test/shader_io/fragment_input_builtins.wgsl.expected.wgsl
index cfad6db..92dfb41 100644
--- a/test/shader_io/fragment_input_builtins.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_builtins.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
-[[stage(fragment)]]
-fn main([[builtin(position)]] position : vec4<f32>, [[builtin(front_facing)]] front_facing : bool, [[builtin(sample_index)]] sample_index : u32, [[builtin(sample_mask)]] sample_mask : u32) {
+@stage(fragment)
+fn main(@builtin(position) position : vec4<f32>, @builtin(front_facing) front_facing : bool, @builtin(sample_index) sample_index : u32, @builtin(sample_mask) sample_mask : u32) {
   if (front_facing) {
     let foo : vec4<f32> = position;
     let bar : u32 = (sample_index + sample_mask);
diff --git a/test/shader_io/fragment_input_builtins_struct.wgsl b/test/shader_io/fragment_input_builtins_struct.wgsl
index af9e0d3..ba833db 100644
--- a/test/shader_io/fragment_input_builtins_struct.wgsl
+++ b/test/shader_io/fragment_input_builtins_struct.wgsl
@@ -1,11 +1,11 @@
 struct FragmentInputs {
-  [[builtin(position)]] position : vec4<f32>;
-  [[builtin(front_facing)]] front_facing : bool;
-  [[builtin(sample_index)]] sample_index : u32;
-  [[builtin(sample_mask)]] sample_mask : u32;
+  @builtin(position) position : vec4<f32>;
+  @builtin(front_facing) front_facing : bool;
+  @builtin(sample_index) sample_index : u32;
+  @builtin(sample_mask) sample_mask : u32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(inputs : FragmentInputs) {
   if (inputs.front_facing) {
     let foo : vec4<f32> = inputs.position;
diff --git a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl
index 79ec5fd..5eddd12 100644
--- a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 struct FragmentInputs {
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
-  [[builtin(front_facing)]]
+  @builtin(front_facing)
   front_facing : bool;
-  [[builtin(sample_index)]]
+  @builtin(sample_index)
   sample_index : u32;
-  [[builtin(sample_mask)]]
+  @builtin(sample_mask)
   sample_mask : u32;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(inputs : FragmentInputs) {
   if (inputs.front_facing) {
     let foo : vec4<f32> = inputs.position;
diff --git a/test/shader_io/fragment_input_locations.wgsl b/test/shader_io/fragment_input_locations.wgsl
index 0ed8e3c..b33cfe4 100644
--- a/test/shader_io/fragment_input_locations.wgsl
+++ b/test/shader_io/fragment_input_locations.wgsl
@@ -1,9 +1,9 @@
-[[stage(fragment)]]
+@stage(fragment)
 fn main(
-  [[location(0), interpolate(flat)]] loc0 : i32,
-  [[location(1), interpolate(flat)]] loc1 : u32,
-  [[location(2)]] loc2 : f32,
-  [[location(3)]] loc3 : vec4<f32>,
+  @location(0) @interpolate(flat) loc0 : i32,
+  @location(1) @interpolate(flat) loc1 : u32,
+  @location(2) loc2 : f32,
+  @location(3) loc3 : vec4<f32>,
 ) {
   let i : i32 = loc0;
   let u : u32 = loc1;
diff --git a/test/shader_io/fragment_input_locations.wgsl.expected.wgsl b/test/shader_io/fragment_input_locations.wgsl.expected.wgsl
index ce13406..a4cd502 100644
--- a/test/shader_io/fragment_input_locations.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_locations.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
-[[stage(fragment)]]
-fn main([[location(0), interpolate(flat)]] loc0 : i32, [[location(1), interpolate(flat)]] loc1 : u32, [[location(2)]] loc2 : f32, [[location(3)]] loc3 : vec4<f32>) {
+@stage(fragment)
+fn main(@location(0) @interpolate(flat) loc0 : i32, @location(1) @interpolate(flat) loc1 : u32, @location(2) loc2 : f32, @location(3) loc3 : vec4<f32>) {
   let i : i32 = loc0;
   let u : u32 = loc1;
   let f : f32 = loc2;
diff --git a/test/shader_io/fragment_input_locations_struct.wgsl b/test/shader_io/fragment_input_locations_struct.wgsl
index 03840c2..e5e4bd5 100644
--- a/test/shader_io/fragment_input_locations_struct.wgsl
+++ b/test/shader_io/fragment_input_locations_struct.wgsl
@@ -1,11 +1,11 @@
 struct FragmentInputs {
-  [[location(0), interpolate(flat)]] loc0 : i32;
-  [[location(1), interpolate(flat)]] loc1 : u32;
-  [[location(2)]] loc2 : f32;
-  [[location(3)]] loc3 : vec4<f32>;
+  @location(0) @interpolate(flat) loc0 : i32;
+  @location(1) @interpolate(flat) loc1 : u32;
+  @location(2) loc2 : f32;
+  @location(3) loc3 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(inputs : FragmentInputs) {
   let i : i32 = inputs.loc0;
   let u : u32 = inputs.loc1;
diff --git a/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl b/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl
index 5179ec9..d4a9ebb 100644
--- a/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 struct FragmentInputs {
-  [[location(0), interpolate(flat)]]
+  @location(0) @interpolate(flat)
   loc0 : i32;
-  [[location(1), interpolate(flat)]]
+  @location(1) @interpolate(flat)
   loc1 : u32;
-  [[location(2)]]
+  @location(2)
   loc2 : f32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(inputs : FragmentInputs) {
   let i : i32 = inputs.loc0;
   let u : u32 = inputs.loc1;
diff --git a/test/shader_io/fragment_input_mixed.wgsl b/test/shader_io/fragment_input_mixed.wgsl
index 62e1312..2bbc728 100644
--- a/test/shader_io/fragment_input_mixed.wgsl
+++ b/test/shader_io/fragment_input_mixed.wgsl
@@ -1,20 +1,20 @@
 struct FragmentInputs0 {
-  [[builtin(position)]] position : vec4<f32>;
-  [[location(0), interpolate(flat)]] loc0 : i32;
+  @builtin(position) position : vec4<f32>;
+  @location(0) @interpolate(flat) loc0 : i32;
 };
 struct FragmentInputs1 {
-  [[location(3)]] loc3 : vec4<f32>;
-  [[builtin(sample_mask)]] sample_mask : u32;
+  @location(3) loc3 : vec4<f32>;
+  @builtin(sample_mask) sample_mask : u32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(
   inputs0 : FragmentInputs0,
-  [[builtin(front_facing)]] front_facing : bool,
-  [[location(1), interpolate(flat)]] loc1 : u32,
-  [[builtin(sample_index)]] sample_index : u32,
+  @builtin(front_facing) front_facing : bool,
+  @location(1) @interpolate(flat) loc1 : u32,
+  @builtin(sample_index) sample_index : u32,
   inputs1 : FragmentInputs1,
-  [[location(2)]] loc2 : f32,
+  @location(2) loc2 : f32,
 ) {
   if (front_facing) {
     let foo : vec4<f32> = inputs0.position;
diff --git a/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl b/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl
index bca1e79..78911e6 100644
--- a/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct FragmentInputs0 {
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
-  [[location(0), interpolate(flat)]]
+  @location(0) @interpolate(flat)
   loc0 : i32;
 }
 
 struct FragmentInputs1 {
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
-  [[builtin(sample_mask)]]
+  @builtin(sample_mask)
   sample_mask : u32;
 }
 
-[[stage(fragment)]]
-fn main(inputs0 : FragmentInputs0, [[builtin(front_facing)]] front_facing : bool, [[location(1), interpolate(flat)]] loc1 : u32, [[builtin(sample_index)]] sample_index : u32, inputs1 : FragmentInputs1, [[location(2)]] loc2 : f32) {
+@stage(fragment)
+fn main(inputs0 : FragmentInputs0, @builtin(front_facing) front_facing : bool, @location(1) @interpolate(flat) loc1 : u32, @builtin(sample_index) sample_index : u32, inputs1 : FragmentInputs1, @location(2) loc2 : f32) {
   if (front_facing) {
     let foo : vec4<f32> = inputs0.position;
     let bar : u32 = (sample_index + inputs1.sample_mask);
diff --git a/test/shader_io/fragment_output_builtins.wgsl b/test/shader_io/fragment_output_builtins.wgsl
index 462cb77..914cbad 100644
--- a/test/shader_io/fragment_output_builtins.wgsl
+++ b/test/shader_io/fragment_output_builtins.wgsl
@@ -1,9 +1,9 @@
-[[stage(fragment)]]
-fn main1() -> [[builtin(frag_depth)]] f32 {
+@stage(fragment)
+fn main1() -> @builtin(frag_depth) f32 {
   return 1.0;
 }
 
-[[stage(fragment)]]
-fn main2() -> [[builtin(sample_mask)]] u32 {
+@stage(fragment)
+fn main2() -> @builtin(sample_mask) u32 {
   return 1u;
 }
diff --git a/test/shader_io/fragment_output_builtins.wgsl.expected.wgsl b/test/shader_io/fragment_output_builtins.wgsl.expected.wgsl
index 462cb77..914cbad 100644
--- a/test/shader_io/fragment_output_builtins.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_builtins.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
-[[stage(fragment)]]
-fn main1() -> [[builtin(frag_depth)]] f32 {
+@stage(fragment)
+fn main1() -> @builtin(frag_depth) f32 {
   return 1.0;
 }
 
-[[stage(fragment)]]
-fn main2() -> [[builtin(sample_mask)]] u32 {
+@stage(fragment)
+fn main2() -> @builtin(sample_mask) u32 {
   return 1u;
 }
diff --git a/test/shader_io/fragment_output_builtins_struct.wgsl b/test/shader_io/fragment_output_builtins_struct.wgsl
index d7b37f8..a67765f 100644
--- a/test/shader_io/fragment_output_builtins_struct.wgsl
+++ b/test/shader_io/fragment_output_builtins_struct.wgsl
@@ -1,9 +1,9 @@
 struct FragmentOutputs {
-  [[builtin(frag_depth)]] frag_depth : f32;
-  [[builtin(sample_mask)]] sample_mask : u32;
+  @builtin(frag_depth) frag_depth : f32;
+  @builtin(sample_mask) sample_mask : u32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> FragmentOutputs {
   return FragmentOutputs(1.0, 1u);
 }
diff --git a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl
index e87f857..86551d3 100644
--- a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl
@@ -1,11 +1,11 @@
 struct FragmentOutputs {
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   frag_depth : f32;
-  [[builtin(sample_mask)]]
+  @builtin(sample_mask)
   sample_mask : u32;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> FragmentOutputs {
   return FragmentOutputs(1.0, 1u);
 }
diff --git a/test/shader_io/fragment_output_locations.wgsl b/test/shader_io/fragment_output_locations.wgsl
index b5858e8..239589d 100644
--- a/test/shader_io/fragment_output_locations.wgsl
+++ b/test/shader_io/fragment_output_locations.wgsl
@@ -1,19 +1,19 @@
-[[stage(fragment)]]
-fn main0() -> [[location(0)]] i32 {
+@stage(fragment)
+fn main0() -> @location(0) i32 {
   return 1;
 }
 
-[[stage(fragment)]]
-fn main1() -> [[location(1)]] u32 {
+@stage(fragment)
+fn main1() -> @location(1) u32 {
   return 1u;
 }
 
-[[stage(fragment)]]
-fn main2() -> [[location(2)]] f32 {
+@stage(fragment)
+fn main2() -> @location(2) f32 {
   return 1.0;
 }
 
-[[stage(fragment)]]
-fn main3() -> [[location(3)]] vec4<f32> {
+@stage(fragment)
+fn main3() -> @location(3) vec4<f32> {
   return vec4<f32>(1.0, 2.0, 3.0, 4.0);
 }
diff --git a/test/shader_io/fragment_output_locations.wgsl.expected.wgsl b/test/shader_io/fragment_output_locations.wgsl.expected.wgsl
index b5858e8..239589d 100644
--- a/test/shader_io/fragment_output_locations.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_locations.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-[[stage(fragment)]]
-fn main0() -> [[location(0)]] i32 {
+@stage(fragment)
+fn main0() -> @location(0) i32 {
   return 1;
 }
 
-[[stage(fragment)]]
-fn main1() -> [[location(1)]] u32 {
+@stage(fragment)
+fn main1() -> @location(1) u32 {
   return 1u;
 }
 
-[[stage(fragment)]]
-fn main2() -> [[location(2)]] f32 {
+@stage(fragment)
+fn main2() -> @location(2) f32 {
   return 1.0;
 }
 
-[[stage(fragment)]]
-fn main3() -> [[location(3)]] vec4<f32> {
+@stage(fragment)
+fn main3() -> @location(3) vec4<f32> {
   return vec4<f32>(1.0, 2.0, 3.0, 4.0);
 }
diff --git a/test/shader_io/fragment_output_locations_struct.wgsl b/test/shader_io/fragment_output_locations_struct.wgsl
index c196843..9d7c9c7 100644
--- a/test/shader_io/fragment_output_locations_struct.wgsl
+++ b/test/shader_io/fragment_output_locations_struct.wgsl
@@ -1,11 +1,11 @@
 struct FragmentOutputs {
-  [[location(0)]] loc0 : i32;
-  [[location(1)]] loc1 : u32;
-  [[location(2)]] loc2 : f32;
-  [[location(3)]] loc3 : vec4<f32>;
+  @location(0) loc0 : i32;
+  @location(1) loc1 : u32;
+  @location(2) loc2 : f32;
+  @location(3) loc3 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> FragmentOutputs {
   return FragmentOutputs(1, 1u, 1.0, vec4<f32>(1.0, 2.0, 3.0, 4.0));
 }
diff --git a/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl b/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl
index da4e7cf..5196236 100644
--- a/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 struct FragmentOutputs {
-  [[location(0)]]
+  @location(0)
   loc0 : i32;
-  [[location(1)]]
+  @location(1)
   loc1 : u32;
-  [[location(2)]]
+  @location(2)
   loc2 : f32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> FragmentOutputs {
   return FragmentOutputs(1, 1u, 1.0, vec4<f32>(1.0, 2.0, 3.0, 4.0));
 }
diff --git a/test/shader_io/fragment_output_mixed.wgsl b/test/shader_io/fragment_output_mixed.wgsl
index 29e5108..58fe80b 100644
--- a/test/shader_io/fragment_output_mixed.wgsl
+++ b/test/shader_io/fragment_output_mixed.wgsl
@@ -1,13 +1,13 @@
 struct FragmentOutputs {
-  [[location(0)]] loc0 : i32;
-  [[builtin(frag_depth)]] frag_depth : f32;
-  [[location(1)]] loc1 : u32;
-  [[location(2)]] loc2 : f32;
-  [[builtin(sample_mask)]] sample_mask : u32;
-  [[location(3)]] loc3 : vec4<f32>;
+  @location(0) loc0 : i32;
+  @builtin(frag_depth) frag_depth : f32;
+  @location(1) loc1 : u32;
+  @location(2) loc2 : f32;
+  @builtin(sample_mask) sample_mask : u32;
+  @location(3) loc3 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> FragmentOutputs {
   return FragmentOutputs(1, 2.0, 1u, 1.0, 2u, vec4<f32>(1.0, 2.0, 3.0, 4.0));
 }
diff --git a/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl b/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl
index 8069265..3cc71b6 100644
--- a/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct FragmentOutputs {
-  [[location(0)]]
+  @location(0)
   loc0 : i32;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   frag_depth : f32;
-  [[location(1)]]
+  @location(1)
   loc1 : u32;
-  [[location(2)]]
+  @location(2)
   loc2 : f32;
-  [[builtin(sample_mask)]]
+  @builtin(sample_mask)
   sample_mask : u32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> FragmentOutputs {
   return FragmentOutputs(1, 2.0, 1u, 1.0, 2u, vec4<f32>(1.0, 2.0, 3.0, 4.0));
 }
diff --git a/test/shader_io/interpolate_input_parameters.wgsl b/test/shader_io/interpolate_input_parameters.wgsl
index 64556cd..3e350ea 100644
--- a/test/shader_io/interpolate_input_parameters.wgsl
+++ b/test/shader_io/interpolate_input_parameters.wgsl
@@ -1,11 +1,11 @@
-[[stage(fragment)]]
+@stage(fragment)
 fn main(
-  [[location(0)]] none : f32,
-  [[location(1), interpolate(flat)]] flat : f32,
-  [[location(2), interpolate(perspective, center)]] perspective_center : f32,
-  [[location(3), interpolate(perspective, centroid)]] perspective_centroid : f32,
-  [[location(4), interpolate(perspective, sample)]] perspective_sample : f32,
-  [[location(5), interpolate(linear, center)]] linear_center : f32,
-  [[location(6), interpolate(linear, centroid)]] linear_centroid : f32,
-  [[location(7), interpolate(linear, sample)]] linear_sample : f32) {
+  @location(0) none : f32,
+  @location(1) @interpolate(flat) flat : f32,
+  @location(2) @interpolate(perspective, center) perspective_center : f32,
+  @location(3) @interpolate(perspective, centroid) perspective_centroid : f32,
+  @location(4) @interpolate(perspective, sample) perspective_sample : f32,
+  @location(5) @interpolate(linear, center) linear_center : f32,
+  @location(6) @interpolate(linear, centroid) linear_centroid : f32,
+  @location(7) @interpolate(linear, sample) linear_sample : f32) {
 }
diff --git a/test/shader_io/interpolate_input_parameters.wgsl.expected.wgsl b/test/shader_io/interpolate_input_parameters.wgsl.expected.wgsl
index 3488ca7..8dbd5b1 100644
--- a/test/shader_io/interpolate_input_parameters.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_input_parameters.wgsl.expected.wgsl
@@ -1,3 +1,3 @@
-[[stage(fragment)]]
-fn main([[location(0)]] none : f32, [[location(1), interpolate(flat)]] flat : f32, [[location(2), interpolate(perspective, center)]] perspective_center : f32, [[location(3), interpolate(perspective, centroid)]] perspective_centroid : f32, [[location(4), interpolate(perspective, sample)]] perspective_sample : f32, [[location(5), interpolate(linear, center)]] linear_center : f32, [[location(6), interpolate(linear, centroid)]] linear_centroid : f32, [[location(7), interpolate(linear, sample)]] linear_sample : f32) {
+@stage(fragment)
+fn main(@location(0) none : f32, @location(1) @interpolate(flat) flat : f32, @location(2) @interpolate(perspective, center) perspective_center : f32, @location(3) @interpolate(perspective, centroid) perspective_centroid : f32, @location(4) @interpolate(perspective, sample) perspective_sample : f32, @location(5) @interpolate(linear, center) linear_center : f32, @location(6) @interpolate(linear, centroid) linear_centroid : f32, @location(7) @interpolate(linear, sample) linear_sample : f32) {
 }
diff --git a/test/shader_io/interpolate_input_struct.wgsl b/test/shader_io/interpolate_input_struct.wgsl
index 0299250..5f5c8c1 100644
--- a/test/shader_io/interpolate_input_struct.wgsl
+++ b/test/shader_io/interpolate_input_struct.wgsl
@@ -1,14 +1,14 @@
 struct In {
-  [[location(0)]] none : f32;
-  [[location(1), interpolate(flat)]] flat : f32;
-  [[location(2), interpolate(perspective, center)]] perspective_center : f32;
-  [[location(3), interpolate(perspective, centroid)]] perspective_centroid : f32;
-  [[location(4), interpolate(perspective, sample)]] perspective_sample : f32;
-  [[location(5), interpolate(linear, center)]] linear_center : f32;
-  [[location(6), interpolate(linear, centroid)]] linear_centroid : f32;
-  [[location(7), interpolate(linear, sample)]] linear_sample : f32;
+  @location(0) none : f32;
+  @location(1) @interpolate(flat) flat : f32;
+  @location(2) @interpolate(perspective, center) perspective_center : f32;
+  @location(3) @interpolate(perspective, centroid) perspective_centroid : f32;
+  @location(4) @interpolate(perspective, sample) perspective_sample : f32;
+  @location(5) @interpolate(linear, center) linear_center : f32;
+  @location(6) @interpolate(linear, centroid) linear_centroid : f32;
+  @location(7) @interpolate(linear, sample) linear_sample : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(in : In) {
 }
diff --git a/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl b/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl
index 20a8106..3a34745 100644
--- a/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl
@@ -1,22 +1,22 @@
 struct In {
-  [[location(0)]]
+  @location(0)
   none : f32;
-  [[location(1), interpolate(flat)]]
+  @location(1) @interpolate(flat)
   flat : f32;
-  [[location(2), interpolate(perspective, center)]]
+  @location(2) @interpolate(perspective, center)
   perspective_center : f32;
-  [[location(3), interpolate(perspective, centroid)]]
+  @location(3) @interpolate(perspective, centroid)
   perspective_centroid : f32;
-  [[location(4), interpolate(perspective, sample)]]
+  @location(4) @interpolate(perspective, sample)
   perspective_sample : f32;
-  [[location(5), interpolate(linear, center)]]
+  @location(5) @interpolate(linear, center)
   linear_center : f32;
-  [[location(6), interpolate(linear, centroid)]]
+  @location(6) @interpolate(linear, centroid)
   linear_centroid : f32;
-  [[location(7), interpolate(linear, sample)]]
+  @location(7) @interpolate(linear, sample)
   linear_sample : f32;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main(in : In) {
 }
diff --git a/test/shader_io/interpolate_integers.wgsl b/test/shader_io/interpolate_integers.wgsl
index 4b3ebe7..f961c8a 100644
--- a/test/shader_io/interpolate_integers.wgsl
+++ b/test/shader_io/interpolate_integers.wgsl
@@ -1,17 +1,17 @@
 struct Interface {
-  [[location(0), interpolate(flat)]] i : i32;
-  [[location(1), interpolate(flat)]] u : u32;
-  [[location(2), interpolate(flat)]] vi : vec4<i32>;
-  [[location(3), interpolate(flat)]] vu : vec4<u32>;
-  [[builtin(position)]] pos : vec4<f32>;
+  @location(0) @interpolate(flat) i : i32;
+  @location(1) @interpolate(flat) u : u32;
+  @location(2) @interpolate(flat) vi : vec4<i32>;
+  @location(3) @interpolate(flat) vu : vec4<u32>;
+  @builtin(position) pos : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main() -> Interface {
   return Interface();
 }
 
-[[stage(fragment)]]
-fn frag_main(inputs : Interface) -> [[location(0)]] i32 {
+@stage(fragment)
+fn frag_main(inputs : Interface) -> @location(0) i32 {
   return inputs.i;
 }
diff --git a/test/shader_io/interpolate_integers.wgsl.expected.wgsl b/test/shader_io/interpolate_integers.wgsl.expected.wgsl
index afabf7c..a6efd12 100644
--- a/test/shader_io/interpolate_integers.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_integers.wgsl.expected.wgsl
@@ -1,22 +1,22 @@
 struct Interface {
-  [[location(0), interpolate(flat)]]
+  @location(0) @interpolate(flat)
   i : i32;
-  [[location(1), interpolate(flat)]]
+  @location(1) @interpolate(flat)
   u : u32;
-  [[location(2), interpolate(flat)]]
+  @location(2) @interpolate(flat)
   vi : vec4<i32>;
-  [[location(3), interpolate(flat)]]
+  @location(3) @interpolate(flat)
   vu : vec4<u32>;
-  [[builtin(position)]]
+  @builtin(position)
   pos : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main() -> Interface {
   return Interface();
 }
 
-[[stage(fragment)]]
-fn frag_main(inputs : Interface) -> [[location(0)]] i32 {
+@stage(fragment)
+fn frag_main(inputs : Interface) -> @location(0) i32 {
   return inputs.i;
 }
diff --git a/test/shader_io/interpolate_return_struct.wgsl b/test/shader_io/interpolate_return_struct.wgsl
index 9d24e61..0cff79e 100644
--- a/test/shader_io/interpolate_return_struct.wgsl
+++ b/test/shader_io/interpolate_return_struct.wgsl
@@ -1,16 +1,16 @@
 struct Out {
-  [[builtin(position)]] pos : vec4<f32>;
-  [[location(0)]] none : f32;
-  [[location(1), interpolate(flat)]] flat : f32;
-  [[location(2), interpolate(perspective, center)]] perspective_center : f32;
-  [[location(3), interpolate(perspective, centroid)]] perspective_centroid : f32;
-  [[location(4), interpolate(perspective, sample)]] perspective_sample : f32;
-  [[location(5), interpolate(linear, center)]] linear_center : f32;
-  [[location(6), interpolate(linear, centroid)]] linear_centroid : f32;
-  [[location(7), interpolate(linear, sample)]] linear_sample : f32;
+  @builtin(position) pos : vec4<f32>;
+  @location(0) none : f32;
+  @location(1) @interpolate(flat) flat : f32;
+  @location(2) @interpolate(perspective, center) perspective_center : f32;
+  @location(3) @interpolate(perspective, centroid) perspective_centroid : f32;
+  @location(4) @interpolate(perspective, sample) perspective_sample : f32;
+  @location(5) @interpolate(linear, center) linear_center : f32;
+  @location(6) @interpolate(linear, centroid) linear_centroid : f32;
+  @location(7) @interpolate(linear, sample) linear_sample : f32;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> Out {
   return Out();
 }
diff --git a/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl b/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl
index bcf8177..9a2164a 100644
--- a/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl
@@ -1,25 +1,25 @@
 struct Out {
-  [[builtin(position)]]
+  @builtin(position)
   pos : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   none : f32;
-  [[location(1), interpolate(flat)]]
+  @location(1) @interpolate(flat)
   flat : f32;
-  [[location(2), interpolate(perspective, center)]]
+  @location(2) @interpolate(perspective, center)
   perspective_center : f32;
-  [[location(3), interpolate(perspective, centroid)]]
+  @location(3) @interpolate(perspective, centroid)
   perspective_centroid : f32;
-  [[location(4), interpolate(perspective, sample)]]
+  @location(4) @interpolate(perspective, sample)
   perspective_sample : f32;
-  [[location(5), interpolate(linear, center)]]
+  @location(5) @interpolate(linear, center)
   linear_center : f32;
-  [[location(6), interpolate(linear, centroid)]]
+  @location(6) @interpolate(linear, centroid)
   linear_centroid : f32;
-  [[location(7), interpolate(linear, sample)]]
+  @location(7) @interpolate(linear, sample)
   linear_sample : f32;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> Out {
   return Out();
 }
diff --git a/test/shader_io/invariant.wgsl b/test/shader_io/invariant.wgsl
index 66b0649..9abbc94 100644
--- a/test/shader_io/invariant.wgsl
+++ b/test/shader_io/invariant.wgsl
@@ -1,4 +1,4 @@
-[[stage(vertex)]]
-fn main() -> [[builtin(position), invariant]] vec4<f32> {
+@stage(vertex)
+fn main() -> @builtin(position) @invariant vec4<f32> {
   return vec4<f32>();
 }
diff --git a/test/shader_io/invariant.wgsl.expected.wgsl b/test/shader_io/invariant.wgsl.expected.wgsl
index 66b0649..9abbc94 100644
--- a/test/shader_io/invariant.wgsl.expected.wgsl
+++ b/test/shader_io/invariant.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(vertex)]]
-fn main() -> [[builtin(position), invariant]] vec4<f32> {
+@stage(vertex)
+fn main() -> @builtin(position) @invariant vec4<f32> {
   return vec4<f32>();
 }
diff --git a/test/shader_io/invariant_struct_member.wgsl b/test/shader_io/invariant_struct_member.wgsl
index 97d813f..3b2a6ad 100644
--- a/test/shader_io/invariant_struct_member.wgsl
+++ b/test/shader_io/invariant_struct_member.wgsl
@@ -1,8 +1,8 @@
 struct Out {
-  [[builtin(position), invariant]] pos : vec4<f32>;
+  @builtin(position) @invariant pos : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> Out {
   return Out();
 }
diff --git a/test/shader_io/invariant_struct_member.wgsl.expected.wgsl b/test/shader_io/invariant_struct_member.wgsl.expected.wgsl
index 503a0ba..64d1f60 100644
--- a/test/shader_io/invariant_struct_member.wgsl.expected.wgsl
+++ b/test/shader_io/invariant_struct_member.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 struct Out {
-  [[builtin(position), invariant]]
+  @builtin(position) @invariant
   pos : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> Out {
   return Out();
 }
diff --git a/test/shader_io/shared_struct_different_stages.wgsl b/test/shader_io/shared_struct_different_stages.wgsl
index 802ce43..2e52791 100644
--- a/test/shader_io/shared_struct_different_stages.wgsl
+++ b/test/shader_io/shared_struct_different_stages.wgsl
@@ -1,15 +1,15 @@
 struct Interface {
-  [[location(1)]] col1 : f32;
-  [[location(2)]] col2 : f32;
-  [[builtin(position)]] pos : vec4<f32>;
+  @location(1) col1 : f32;
+  @location(2) col2 : f32;
+  @builtin(position) pos : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main() -> Interface {
   return Interface(0.4, 0.6, vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn frag_main(colors : Interface) {
   let r : f32 = colors.col1;
   let g : f32 = colors.col2;
diff --git a/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl b/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl
index 343afdd..81fbc7a 100644
--- a/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl
+++ b/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct Interface {
-  [[location(1)]]
+  @location(1)
   col1 : f32;
-  [[location(2)]]
+  @location(2)
   col2 : f32;
-  [[builtin(position)]]
+  @builtin(position)
   pos : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main() -> Interface {
   return Interface(0.400000006, 0.600000024, vec4<f32>());
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn frag_main(colors : Interface) {
   let r : f32 = colors.col1;
   let g : f32 = colors.col2;
diff --git a/test/shader_io/shared_struct_helper_function.wgsl b/test/shader_io/shared_struct_helper_function.wgsl
index 2ebd094..7f7d203 100644
--- a/test/shader_io/shared_struct_helper_function.wgsl
+++ b/test/shader_io/shared_struct_helper_function.wgsl
@@ -1,18 +1,18 @@
 struct VertexOutput {
-  [[builtin(position)]] pos : vec4<f32>;
-  [[location(0), interpolate(flat)]] loc0 : i32;
+  @builtin(position) pos : vec4<f32>;
+  @location(0) @interpolate(flat) loc0 : i32;
 };
 
 fn foo(x : f32) -> VertexOutput {
   return VertexOutput(vec4<f32>(x, x, x, 1.0), 42);
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main1() -> VertexOutput {
   return foo(0.5);
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main2() -> VertexOutput {
   return foo(0.25);
 }
diff --git a/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl b/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl
index 034d5e1..4cad81a 100644
--- a/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl
+++ b/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct VertexOutput {
-  [[builtin(position)]]
+  @builtin(position)
   pos : vec4<f32>;
-  [[location(0), interpolate(flat)]]
+  @location(0) @interpolate(flat)
   loc0 : i32;
 }
 
@@ -9,12 +9,12 @@
   return VertexOutput(vec4<f32>(x, x, x, 1.0), 42);
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main1() -> VertexOutput {
   return foo(0.5);
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn vert_main2() -> VertexOutput {
   return foo(0.25);
 }
diff --git a/test/shader_io/shared_struct_storage_buffer.wgsl b/test/shader_io/shared_struct_storage_buffer.wgsl
index 5d3f93e..83b1ba5 100644
--- a/test/shader_io/shared_struct_storage_buffer.wgsl
+++ b/test/shader_io/shared_struct_storage_buffer.wgsl
@@ -1,13 +1,13 @@
 struct S {
-  [[align(64)]] [[location(0)]] f : f32;
-  [[size(32)]] [[location(1), interpolate(flat)]] u : u32;
-  [[align(128)]] [[builtin(position)]] v : vec4<f32>;
+  @align(64) @location(0) f : f32;
+  @size(32) @location(1) @interpolate(flat) u : u32;
+  @align(128) @builtin(position) v : vec4<f32>;
 };
 
-[[group(0), binding(0)]]
+@group(0) @binding(0)
 var<storage, write> output : S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn frag_main(input : S) {
   let f : f32 = input.f;
   let u : u32 = input.u;
diff --git a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl
index 7872704..f4667a4 100644
--- a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl
+++ b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 struct S {
-  [[align(64), location(0)]]
+  @align(64) @location(0)
   f : f32;
-  [[size(32), location(1), interpolate(flat)]]
+  @size(32) @location(1) @interpolate(flat)
   u : u32;
-  [[align(128), builtin(position)]]
+  @align(128) @builtin(position)
   v : vec4<f32>;
 }
 
-[[group(0), binding(0)]] var<storage, write> output : S;
+@group(0) @binding(0) var<storage, write> output : S;
 
-[[stage(fragment)]]
+@stage(fragment)
 fn frag_main(input : S) {
   let f : f32 = input.f;
   let u : u32 = input.u;
diff --git a/test/shader_io/vertex_input_builtins.wgsl b/test/shader_io/vertex_input_builtins.wgsl
index 6d207b5..a73ae88 100644
--- a/test/shader_io/vertex_input_builtins.wgsl
+++ b/test/shader_io/vertex_input_builtins.wgsl
@@ -1,8 +1,8 @@
-[[stage(vertex)]]
+@stage(vertex)
 fn main(
-  [[builtin(vertex_index)]] vertex_index : u32,
-  [[builtin(instance_index)]] instance_index : u32,
-) -> [[builtin(position)]] vec4<f32> {
+  @builtin(vertex_index) vertex_index : u32,
+  @builtin(instance_index) instance_index : u32,
+) -> @builtin(position) vec4<f32> {
   let foo : u32 = vertex_index + instance_index;
   return vec4<f32>();
 }
diff --git a/test/shader_io/vertex_input_builtins.wgsl.expected.wgsl b/test/shader_io/vertex_input_builtins.wgsl.expected.wgsl
index ef2f3ac..9955c16 100644
--- a/test/shader_io/vertex_input_builtins.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_builtins.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] vertex_index : u32, [[builtin(instance_index)]] instance_index : u32) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(@builtin(vertex_index) vertex_index : u32, @builtin(instance_index) instance_index : u32) -> @builtin(position) vec4<f32> {
   let foo : u32 = (vertex_index + instance_index);
   return vec4<f32>();
 }
diff --git a/test/shader_io/vertex_input_builtins_struct.wgsl b/test/shader_io/vertex_input_builtins_struct.wgsl
index d81bcdc..03c295a 100644
--- a/test/shader_io/vertex_input_builtins_struct.wgsl
+++ b/test/shader_io/vertex_input_builtins_struct.wgsl
@@ -1,10 +1,10 @@
 struct VertexInputs {
-  [[builtin(vertex_index)]] vertex_index : u32;
-  [[builtin(instance_index)]] instance_index : u32;
+  @builtin(vertex_index) vertex_index : u32;
+  @builtin(instance_index) instance_index : u32;
 };
 
-[[stage(vertex)]]
-fn main(inputs : VertexInputs) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(inputs : VertexInputs) -> @builtin(position) vec4<f32> {
   let foo : u32 = inputs.vertex_index + inputs.instance_index;
   return vec4<f32>();
 }
diff --git a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl
index 7d885b4..e48655f 100644
--- a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct VertexInputs {
-  [[builtin(vertex_index)]]
+  @builtin(vertex_index)
   vertex_index : u32;
-  [[builtin(instance_index)]]
+  @builtin(instance_index)
   instance_index : u32;
 }
 
-[[stage(vertex)]]
-fn main(inputs : VertexInputs) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(inputs : VertexInputs) -> @builtin(position) vec4<f32> {
   let foo : u32 = (inputs.vertex_index + inputs.instance_index);
   return vec4<f32>();
 }
diff --git a/test/shader_io/vertex_input_locations.wgsl b/test/shader_io/vertex_input_locations.wgsl
index 13fad04..3627e13 100644
--- a/test/shader_io/vertex_input_locations.wgsl
+++ b/test/shader_io/vertex_input_locations.wgsl
@@ -1,10 +1,10 @@
-[[stage(vertex)]]
+@stage(vertex)
 fn main(
-  [[location(0)]] loc0 : i32,
-  [[location(1)]] loc1 : u32,
-  [[location(2)]] loc2 : f32,
-  [[location(3)]] loc3 : vec4<f32>,
-) -> [[builtin(position)]] vec4<f32> {
+  @location(0) loc0 : i32,
+  @location(1) loc1 : u32,
+  @location(2) loc2 : f32,
+  @location(3) loc3 : vec4<f32>,
+) -> @builtin(position) vec4<f32> {
   let i : i32 = loc0;
   let u : u32 = loc1;
   let f : f32 = loc2;
diff --git a/test/shader_io/vertex_input_locations.wgsl.expected.wgsl b/test/shader_io/vertex_input_locations.wgsl.expected.wgsl
index 3730fec..4964dc7 100644
--- a/test/shader_io/vertex_input_locations.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_locations.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
-[[stage(vertex)]]
-fn main([[location(0)]] loc0 : i32, [[location(1)]] loc1 : u32, [[location(2)]] loc2 : f32, [[location(3)]] loc3 : vec4<f32>) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(@location(0) loc0 : i32, @location(1) loc1 : u32, @location(2) loc2 : f32, @location(3) loc3 : vec4<f32>) -> @builtin(position) vec4<f32> {
   let i : i32 = loc0;
   let u : u32 = loc1;
   let f : f32 = loc2;
diff --git a/test/shader_io/vertex_input_locations_struct.wgsl b/test/shader_io/vertex_input_locations_struct.wgsl
index 441ffdc..96a8145 100644
--- a/test/shader_io/vertex_input_locations_struct.wgsl
+++ b/test/shader_io/vertex_input_locations_struct.wgsl
@@ -1,12 +1,12 @@
 struct VertexInputs {
-  [[location(0)]] loc0 : i32;
-  [[location(1)]] loc1 : u32;
-  [[location(2)]] loc2 : f32;
-  [[location(3)]] loc3 : vec4<f32>;
+  @location(0) loc0 : i32;
+  @location(1) loc1 : u32;
+  @location(2) loc2 : f32;
+  @location(3) loc3 : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main(inputs : VertexInputs) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(inputs : VertexInputs) -> @builtin(position) vec4<f32> {
   let i : i32 = inputs.loc0;
   let u : u32 = inputs.loc1;
   let f : f32 = inputs.loc2;
diff --git a/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl b/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl
index 7b7c1b0..c267c60 100644
--- a/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct VertexInputs {
-  [[location(0)]]
+  @location(0)
   loc0 : i32;
-  [[location(1)]]
+  @location(1)
   loc1 : u32;
-  [[location(2)]]
+  @location(2)
   loc2 : f32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
 }
 
-[[stage(vertex)]]
-fn main(inputs : VertexInputs) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(inputs : VertexInputs) -> @builtin(position) vec4<f32> {
   let i : i32 = inputs.loc0;
   let u : u32 = inputs.loc1;
   let f : f32 = inputs.loc2;
diff --git a/test/shader_io/vertex_input_mixed.wgsl b/test/shader_io/vertex_input_mixed.wgsl
index 7c5eafe..8e3c764 100644
--- a/test/shader_io/vertex_input_mixed.wgsl
+++ b/test/shader_io/vertex_input_mixed.wgsl
@@ -1,19 +1,19 @@
 struct VertexInputs0 {
-  [[builtin(vertex_index)]] vertex_index : u32;
-  [[location(0)]] loc0 : i32;
+  @builtin(vertex_index) vertex_index : u32;
+  @location(0) loc0 : i32;
 };
 struct VertexInputs1 {
-  [[location(2)]] loc2 : f32;
-  [[location(3)]] loc3 : vec4<f32>;
+  @location(2) loc2 : f32;
+  @location(3) loc3 : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main(
   inputs0 : VertexInputs0,
-  [[location(1)]] loc1 : u32,
-  [[builtin(instance_index)]] instance_index : u32,
+  @location(1) loc1 : u32,
+  @builtin(instance_index) instance_index : u32,
   inputs1 : VertexInputs1,
-) -> [[builtin(position)]] vec4<f32> {
+) -> @builtin(position) vec4<f32> {
   let foo : u32 = inputs0.vertex_index + instance_index;
   let i : i32 = inputs0.loc0;
   let u : u32 = loc1;
diff --git a/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl b/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl
index 81a6507..5830ebe 100644
--- a/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct VertexInputs0 {
-  [[builtin(vertex_index)]]
+  @builtin(vertex_index)
   vertex_index : u32;
-  [[location(0)]]
+  @location(0)
   loc0 : i32;
 }
 
 struct VertexInputs1 {
-  [[location(2)]]
+  @location(2)
   loc2 : f32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
 }
 
-[[stage(vertex)]]
-fn main(inputs0 : VertexInputs0, [[location(1)]] loc1 : u32, [[builtin(instance_index)]] instance_index : u32, inputs1 : VertexInputs1) -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main(inputs0 : VertexInputs0, @location(1) loc1 : u32, @builtin(instance_index) instance_index : u32, inputs1 : VertexInputs1) -> @builtin(position) vec4<f32> {
   let foo : u32 = (inputs0.vertex_index + instance_index);
   let i : i32 = inputs0.loc0;
   let u : u32 = loc1;
diff --git a/test/shader_io/vertex_output_builtins.wgsl b/test/shader_io/vertex_output_builtins.wgsl
index 46776de..d606b44 100644
--- a/test/shader_io/vertex_output_builtins.wgsl
+++ b/test/shader_io/vertex_output_builtins.wgsl
@@ -1,4 +1,4 @@
-[[stage(vertex)]]
-fn main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main() -> @builtin(position) vec4<f32> {
   return vec4<f32>(1.0, 2.0, 3.0, 4.0);
 }
diff --git a/test/shader_io/vertex_output_builtins.wgsl.expected.wgsl b/test/shader_io/vertex_output_builtins.wgsl.expected.wgsl
index 46776de..d606b44 100644
--- a/test/shader_io/vertex_output_builtins.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_output_builtins.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(vertex)]]
-fn main() -> [[builtin(position)]] vec4<f32> {
+@stage(vertex)
+fn main() -> @builtin(position) vec4<f32> {
   return vec4<f32>(1.0, 2.0, 3.0, 4.0);
 }
diff --git a/test/shader_io/vertex_output_builtins_struct.wgsl b/test/shader_io/vertex_output_builtins_struct.wgsl
index 9e09d38..afdcdf5 100644
--- a/test/shader_io/vertex_output_builtins_struct.wgsl
+++ b/test/shader_io/vertex_output_builtins_struct.wgsl
@@ -1,8 +1,8 @@
 struct VertexOutputs {
-  [[builtin(position)]] position : vec4<f32>;
+  @builtin(position) position : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> VertexOutputs {
   return VertexOutputs(vec4<f32>(1.0, 2.0, 3.0, 4.0));
 }
diff --git a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl
index 744325c..f08c3a8 100644
--- a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 struct VertexOutputs {
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> VertexOutputs {
   return VertexOutputs(vec4<f32>(1.0, 2.0, 3.0, 4.0));
 }
diff --git a/test/shader_io/vertex_output_locations_struct.wgsl b/test/shader_io/vertex_output_locations_struct.wgsl
index e7c4db1..aca5f94 100644
--- a/test/shader_io/vertex_output_locations_struct.wgsl
+++ b/test/shader_io/vertex_output_locations_struct.wgsl
@@ -1,12 +1,12 @@
 struct VertexOutputs {
-  [[location(0), interpolate(flat)]] loc0 : i32;
-  [[location(1), interpolate(flat)]] loc1 : u32;
-  [[location(2)]] loc2 : f32;
-  [[location(3)]] loc3 : vec4<f32>;
-  [[builtin(position)]] position : vec4<f32>;
+  @location(0) @interpolate(flat) loc0 : i32;
+  @location(1) @interpolate(flat) loc1 : u32;
+  @location(2) loc2 : f32;
+  @location(3) loc3 : vec4<f32>;
+  @builtin(position) position : vec4<f32>;
 };
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> VertexOutputs {
   return VertexOutputs(1, 1u, 1.0, vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>());
 }
diff --git a/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl b/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl
index a3df42d..a41d17a 100644
--- a/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl
@@ -1,17 +1,17 @@
 struct VertexOutputs {
-  [[location(0), interpolate(flat)]]
+  @location(0) @interpolate(flat)
   loc0 : i32;
-  [[location(1), interpolate(flat)]]
+  @location(1) @interpolate(flat)
   loc1 : u32;
-  [[location(2)]]
+  @location(2)
   loc2 : f32;
-  [[location(3)]]
+  @location(3)
   loc3 : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   position : vec4<f32>;
 }
 
-[[stage(vertex)]]
+@stage(vertex)
 fn main() -> VertexOutputs {
   return VertexOutputs(1, 1u, 1.0, vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>());
 }
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl
index 379856e..54e9eaa 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl
index f6394af..70dc145 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl
index 5ca5836..626f7da 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl
index 85d01c6..6668957 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl
index d9dd6b2..f8a0e7c 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl
index 6d4ee1c..fa0f10b 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl
index 9d569e3..6ca184c 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl
@@ -21,9 +21,9 @@
   return nextIndex;

 }

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl
index 7ae55be..071143f 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl
@@ -22,9 +22,9 @@
   return nextIndex;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl
index 2268109..0583104 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl
index 22548cc..f41f74e 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl
index 2f0e920..b2f6451 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl
@@ -11,9 +11,9 @@
   a1 : array<array<InnerS, 8>, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl
index 555cf5d..bf83d2c 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl
@@ -11,9 +11,9 @@
   a1 : array<array<InnerS, 8>, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl
index 2dfdfc8..a03babc 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl
@@ -14,9 +14,9 @@
   a1 : array<S1, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl
index cae1e5df..6bd5dd7 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl
@@ -14,9 +14,9 @@
   a1 : array<S1, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl
index c8d97e5..6a377ec 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl
@@ -15,9 +15,9 @@
   a1 : array<S1, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl
index 6969d94..aa1010a 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl
@@ -15,9 +15,9 @@
   a1 : array<S1, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl
index 99ad0f0..b4b4f71 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl
@@ -10,10 +10,10 @@
   a1 : array<InnerS>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

-[[binding(0), group(0)]] var<storage, read_write> s1 : OuterS;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

+@binding(0) @group(0) var<storage, read_write> s1 : OuterS;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   s1.a1[uniforms.i] = v;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl
index c08a5f8..d5c02bc 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl
@@ -10,11 +10,11 @@
   a1 : array<InnerS>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[binding(0), group(0)]] var<storage, read_write> s1 : OuterS;
+@binding(0) @group(0) var<storage, read_write> s1 : OuterS;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   s1.a1[uniforms.i] = v;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl
index 0d40e81..711e990 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl
@@ -15,10 +15,10 @@
   a1 : array<S1>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

-[[binding(0), group(0)]] var<storage, read_write> s : OuterS;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

+@binding(0) @group(0) var<storage, read_write> s : OuterS;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   s.a1[uniforms.i].a2[uniforms.j] = v;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl
index c53b90d..56b7fd6 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl
@@ -15,11 +15,11 @@
   a1 : array<S1>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[binding(0), group(0)]] var<storage, read_write> s : OuterS;
+@binding(0) @group(0) var<storage, read_write> s : OuterS;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   s.a1[uniforms.i].a2[uniforms.j] = v;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl
index 3c67742..ee95b91 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl
@@ -6,9 +6,9 @@
   m1 : mat2x4<f32>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var s1 : OuterS;

   s1.m1[uniforms.i] = vec4<f32>(1.0);

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl
index aeb5f1b..9cb1a85 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl
@@ -6,9 +6,9 @@
   m1 : mat2x4<f32>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var s1 : OuterS;
   s1.m1[uniforms.i] = vec4<f32>(1.0);
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl
index 1fcd397..9d8ac68 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl
@@ -11,9 +11,9 @@
   a2 : array<InnerS, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl
index 55091c5..d39372f 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl
@@ -11,9 +11,9 @@
   a2 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl
index bff1418..12591b3 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl
@@ -14,9 +14,9 @@
   s2 : S1;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl
index f2ebffe..2d65b1f 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl
@@ -14,9 +14,9 @@
   s2 : S1;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl
index 578124f..b5baa12 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl
@@ -6,9 +6,9 @@
   v1 : vec3<f32>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var s1 : OuterS;

   s1.v1[uniforms.i] = 1.0;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl
index da718cf..e47e024 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl
@@ -6,9 +6,9 @@
   v1 : vec3<f32>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var s1 : OuterS;
   s1.v1[uniforms.i] = 1.0;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl
index c8b46c5..49fbde7 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl
@@ -6,13 +6,13 @@
   a1 : array<u32, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 fn f(i: u32) -> u32 {

   return i + 1u;

 }

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var s1 : OuterS;

   var v : vec3<f32>;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl
index 928e38d..bfa66c2 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl
@@ -6,13 +6,13 @@
   a1 : array<u32, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 fn f(i : u32) -> u32 {
   return (i + 1u);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var s1 : OuterS;
   var v : vec3<f32>;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl
index b44dcfa..133c000 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;

 };

 

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var v : InnerS;

   var s1 : OuterS;

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl
index f65b285..5ae5fca 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl
@@ -10,9 +10,9 @@
   a1 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : InnerS;
   var s1 : OuterS;
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl
index 2391e14..b7cedd0 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl
@@ -7,14 +7,14 @@
 struct OuterS {

   a1 : array<InnerS, 8>;

 };

-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;

+@group(1) @binding(4) var<uniform> uniforms : Uniforms;

 

 fn f(p : ptr<function, OuterS>) {

   var v : InnerS;

   (*p).a1[uniforms.i] = v;

 }

 

-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn main() {

   var s1 : OuterS;

   f(&s1);

diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl
index 86b031a..75cedf7 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl
@@ -10,14 +10,14 @@
   a1 : array<InnerS, 8>;
 }
 
-[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+@group(1) @binding(4) var<uniform> uniforms : Uniforms;
 
 fn f(p : ptr<function, OuterS>) {
   var v : InnerS;
   (*(p)).a1[uniforms.i] = v;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var s1 : OuterS;
   f(&(s1));
diff --git a/test/statements/assign/phony/addr_of_non_constructable.wgsl b/test/statements/assign/phony/addr_of_non_constructable.wgsl
index 2ebe66d..f616560 100644
--- a/test/statements/assign/phony/addr_of_non_constructable.wgsl
+++ b/test/statements/assign/phony/addr_of_non_constructable.wgsl
@@ -2,9 +2,9 @@
     arr : array<i32>;
 };
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = &s;
 }
diff --git a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl
index 0952e9dd..9a8aa90 100644
--- a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   arr : array<i32>;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = &(s);
 }
diff --git a/test/statements/assign/phony/addr_of_runtime_array.wgsl b/test/statements/assign/phony/addr_of_runtime_array.wgsl
index 9121fe8..bbf5448 100644
--- a/test/statements/assign/phony/addr_of_runtime_array.wgsl
+++ b/test/statements/assign/phony/addr_of_runtime_array.wgsl
@@ -2,9 +2,9 @@
     arr : array<i32>;
 };
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = &s.arr;
 }
diff --git a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl
index b6c7441..13a6462 100644
--- a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   arr : array<i32>;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = &(s.arr);
 }
diff --git a/test/statements/assign/phony/call.wgsl b/test/statements/assign/phony/call.wgsl
index 8be76ec..5f44585 100644
--- a/test/statements/assign/phony/call.wgsl
+++ b/test/statements/assign/phony/call.wgsl
@@ -2,7 +2,7 @@
     return a * b + c;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = f(1, 2, 3);
 }
diff --git a/test/statements/assign/phony/call.wgsl.expected.wgsl b/test/statements/assign/phony/call.wgsl.expected.wgsl
index c650359..cef5c5f 100644
--- a/test/statements/assign/phony/call.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/call.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   return ((a * b) + c);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = f(1, 2, 3);
 }
diff --git a/test/statements/assign/phony/multiple_side_effects.wgsl b/test/statements/assign/phony/multiple_side_effects.wgsl
index fcfccd1..da2faf8 100644
--- a/test/statements/assign/phony/multiple_side_effects.wgsl
+++ b/test/statements/assign/phony/multiple_side_effects.wgsl
@@ -2,7 +2,7 @@
     return a * b + c;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = f(1, 2, 3) + f(4, 5, 6) * f(7, f(8, 9, 10), 11);
 }
diff --git a/test/statements/assign/phony/multiple_side_effects.wgsl.expected.wgsl b/test/statements/assign/phony/multiple_side_effects.wgsl.expected.wgsl
index 0c7cc23..e438785 100644
--- a/test/statements/assign/phony/multiple_side_effects.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/multiple_side_effects.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   return ((a * b) + c);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = (f(1, 2, 3) + (f(4, 5, 6) * f(7, f(8, 9, 10), 11)));
 }
diff --git a/test/statements/assign/phony/storage_buffer.wgsl b/test/statements/assign/phony/storage_buffer.wgsl
index 9f78472..c8eb0ec 100644
--- a/test/statements/assign/phony/storage_buffer.wgsl
+++ b/test/statements/assign/phony/storage_buffer.wgsl
@@ -2,9 +2,9 @@
     i : i32;
 };
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = s;
     _ = s.i;
diff --git a/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl b/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl
index c4caa99..5f2debd 100644
--- a/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   i : i32;
 }
 
-[[binding(0), group(0)]] var<storage, read_write> s : S;
+@binding(0) @group(0) var<storage, read_write> s : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = s;
   _ = s.i;
diff --git a/test/statements/assign/phony/uniform_buffer.wgsl b/test/statements/assign/phony/uniform_buffer.wgsl
index c0526bc..f7286c9 100644
--- a/test/statements/assign/phony/uniform_buffer.wgsl
+++ b/test/statements/assign/phony/uniform_buffer.wgsl
@@ -2,9 +2,9 @@
     i : i32;
 };
 
-[[binding(0), group(0)]] var<uniform> u : S;
+@binding(0) @group(0) var<uniform> u : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = u;
     _ = u.i;
diff --git a/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl b/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl
index 3ef1045..d20153a 100644
--- a/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl
@@ -2,9 +2,9 @@
   i : i32;
 }
 
-[[binding(0), group(0)]] var<uniform> u : S;
+@binding(0) @group(0) var<uniform> u : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = u;
   _ = u.i;
diff --git a/test/statements/switch/common.wgsl b/test/statements/switch/common.wgsl
index ada8f5e..bed7942 100644
--- a/test/statements/switch/common.wgsl
+++ b/test/statements/switch/common.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn f() {

     var i : i32;

     var result : i32;

diff --git a/test/statements/switch/common.wgsl.expected.wgsl b/test/statements/switch/common.wgsl.expected.wgsl
index 9aad3f1..8b56b03 100644
--- a/test/statements/switch/common.wgsl.expected.wgsl
+++ b/test/statements/switch/common.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var i : i32;
   var result : i32;
diff --git a/test/statements/switch/fallthrough.wgsl b/test/statements/switch/fallthrough.wgsl
index 20eae21..70691c8 100644
--- a/test/statements/switch/fallthrough.wgsl
+++ b/test/statements/switch/fallthrough.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
     var i : i32;
     switch(i) {
diff --git a/test/statements/switch/fallthrough.wgsl.expected.wgsl b/test/statements/switch/fallthrough.wgsl.expected.wgsl
index 37163f5..b04e882 100644
--- a/test/statements/switch/fallthrough.wgsl.expected.wgsl
+++ b/test/statements/switch/fallthrough.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var i : i32;
   switch(i) {
diff --git a/test/statements/switch/only_default_case.wgsl b/test/statements/switch/only_default_case.wgsl
index cb12fb9..0f61d18 100644
--- a/test/statements/switch/only_default_case.wgsl
+++ b/test/statements/switch/only_default_case.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]

+@stage(compute) @workgroup_size(1)

 fn f() {

     var i : i32;

     var result : i32;

diff --git a/test/statements/switch/only_default_case.wgsl.expected.wgsl b/test/statements/switch/only_default_case.wgsl.expected.wgsl
index bd050b7..234f256 100644
--- a/test/statements/switch/only_default_case.wgsl.expected.wgsl
+++ b/test/statements/switch/only_default_case.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn f() {
   var i : i32;
   var result : i32;
diff --git a/test/struct/type_constructor.wgsl b/test/struct/type_constructor.wgsl
index 1725ffa..f79b527 100644
--- a/test/struct/type_constructor.wgsl
+++ b/test/struct/type_constructor.wgsl
@@ -20,7 +20,7 @@
   a : array<i32, 2>;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x : i32 = 42;
 
diff --git a/test/struct/type_constructor.wgsl.expected.wgsl b/test/struct/type_constructor.wgsl.expected.wgsl
index c526e3f..d4a5bbd 100644
--- a/test/struct/type_constructor.wgsl.expected.wgsl
+++ b/test/struct/type_constructor.wgsl.expected.wgsl
@@ -20,7 +20,7 @@
   a : array<i32, 2>;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let x : i32 = 42;
   let empty : S1 = S1();
diff --git a/test/types/function_scope_declarations.wgsl b/test/types/function_scope_declarations.wgsl
index 9f13250..fe560bb 100644
--- a/test/types/function_scope_declarations.wgsl
+++ b/test/types/function_scope_declarations.wgsl
@@ -2,7 +2,7 @@
   a : f32;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var bool_var : bool = bool();
   let bool_let : bool = bool();
diff --git a/test/types/function_scope_declarations.wgsl.expected.wgsl b/test/types/function_scope_declarations.wgsl.expected.wgsl
index 3845786..e5168c2 100644
--- a/test/types/function_scope_declarations.wgsl.expected.wgsl
+++ b/test/types/function_scope_declarations.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
   a : f32;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var bool_var : bool = bool();
   let bool_let : bool = bool();
diff --git a/test/types/function_scope_var_conversions.wgsl b/test/types/function_scope_var_conversions.wgsl
index 66cc378..4f58b71 100644
--- a/test/types/function_scope_var_conversions.wgsl
+++ b/test/types/function_scope_var_conversions.wgsl
@@ -3,7 +3,7 @@
   var b : vec2<f32> = vec2<f32>(f32(i32(1)), a);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var bool_var1 : bool = bool(123u);
   var bool_var2 : bool = bool(123);
diff --git a/test/types/function_scope_var_conversions.wgsl.expected.wgsl b/test/types/function_scope_var_conversions.wgsl.expected.wgsl
index de961c6..53206b3 100644
--- a/test/types/function_scope_var_conversions.wgsl.expected.wgsl
+++ b/test/types/function_scope_var_conversions.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   var b : vec2<f32> = vec2<f32>(f32(i32(1)), a);
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var bool_var1 : bool = bool(123u);
   var bool_var2 : bool = bool(123);
diff --git a/test/types/module_scope_let.wgsl b/test/types/module_scope_let.wgsl
index 85b317c..54718f4 100644
--- a/test/types/module_scope_let.wgsl
+++ b/test/types/module_scope_let.wgsl
@@ -13,6 +13,6 @@
 let arr_let : array<f32, 4> = array<f32, 4>();
 let struct_let : S = S();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
 }
diff --git a/test/types/module_scope_let.wgsl.expected.wgsl b/test/types/module_scope_let.wgsl.expected.wgsl
index be35814..8d091d3 100644
--- a/test/types/module_scope_let.wgsl.expected.wgsl
+++ b/test/types/module_scope_let.wgsl.expected.wgsl
@@ -22,6 +22,6 @@
 
 let struct_let : S = S();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
 }
diff --git a/test/types/module_scope_var.wgsl b/test/types/module_scope_var.wgsl
index e9ab444..a748f59 100644
--- a/test/types/module_scope_var.wgsl
+++ b/test/types/module_scope_var.wgsl
@@ -13,7 +13,7 @@
 var<private> arr_var : array<f32, 4>;
 var<private> struct_var : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   // Reference the module-scope variables to stop them from being removed.
   bool_var = bool();
diff --git a/test/types/module_scope_var.wgsl.expected.wgsl b/test/types/module_scope_var.wgsl.expected.wgsl
index 55f4e0a..31ee7a7 100644
--- a/test/types/module_scope_var.wgsl.expected.wgsl
+++ b/test/types/module_scope_var.wgsl.expected.wgsl
@@ -22,7 +22,7 @@
 
 var<private> struct_var : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   bool_var = bool();
   i32_var = i32();
diff --git a/test/types/module_scope_var_conversions.wgsl b/test/types/module_scope_var_conversions.wgsl
index 935a1e4..ce6fa2e 100644
--- a/test/types/module_scope_var_conversions.wgsl
+++ b/test/types/module_scope_var_conversions.wgsl
@@ -25,7 +25,7 @@
 var<private> v3bool_var4 : vec3<bool> = vec3<bool>(vec2<bool>(vec2<f32>(123.0)), true);
 var<private> v4bool_var5 : vec4<bool> = vec4<bool>(vec2<bool>(vec2<f32>(123.0, 0.0)), vec2<bool>(true, bool(f32(0.0))));
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   // Reference the module-scope variables to stop them from being removed.
   bool_var1 = bool();
diff --git a/test/types/module_scope_var_conversions.wgsl.expected.wgsl b/test/types/module_scope_var_conversions.wgsl.expected.wgsl
index f3b8876..b5373bf 100644
--- a/test/types/module_scope_var_conversions.wgsl.expected.wgsl
+++ b/test/types/module_scope_var_conversions.wgsl.expected.wgsl
@@ -38,7 +38,7 @@
 
 var<private> v4bool_var5 : vec4<bool> = vec4<bool>(vec2<bool>(vec2<f32>(123.0, 0.0)), vec2<bool>(true, bool(f32(0.0))));
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   bool_var1 = bool();
   bool_var2 = bool();
diff --git a/test/types/module_scope_var_initializers.wgsl b/test/types/module_scope_var_initializers.wgsl
index b7402d0..fb2eb8c 100644
--- a/test/types/module_scope_var_initializers.wgsl
+++ b/test/types/module_scope_var_initializers.wgsl
@@ -13,7 +13,7 @@
 var<private> arr_var : array<f32, 4> = array<f32, 4>();
 var<private> struct_var : S = S();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   // Reference the module-scope variables to stop them from being removed.
   bool_var = bool();
diff --git a/test/types/module_scope_var_initializers.wgsl.expected.wgsl b/test/types/module_scope_var_initializers.wgsl.expected.wgsl
index d9dcf61..e2b011b 100644
--- a/test/types/module_scope_var_initializers.wgsl.expected.wgsl
+++ b/test/types/module_scope_var_initializers.wgsl.expected.wgsl
@@ -22,7 +22,7 @@
 
 var<private> struct_var : S = S();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   bool_var = bool();
   i32_var = i32();
diff --git a/test/types/parameters.wgsl b/test/types/parameters.wgsl
index 21987c9..1ea45ae 100644
--- a/test/types/parameters.wgsl
+++ b/test/types/parameters.wgsl
@@ -18,6 +18,6 @@
   param_ptr_arr : ptr<function, array<f32, 4>>,
 ) {}
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
 }
diff --git a/test/types/parameters.wgsl.expected.wgsl b/test/types/parameters.wgsl.expected.wgsl
index 2720ce3..2bda0fb 100644
--- a/test/types/parameters.wgsl.expected.wgsl
+++ b/test/types/parameters.wgsl.expected.wgsl
@@ -5,6 +5,6 @@
 fn foo(param_bool : bool, param_i32 : i32, param_u32 : u32, param_f32 : f32, param_v2i32 : vec2<i32>, param_v3u32 : vec3<u32>, param_v4f32 : vec4<f32>, param_m2x3 : mat2x3<f32>, param_arr : array<f32, 4>, param_struct : S, param_ptr_f32 : ptr<function, f32>, param_ptr_vec : ptr<function, vec4<f32>>, param_ptr_arr : ptr<function, array<f32, 4>>) {
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
 }
diff --git a/test/types/return_types.wgsl b/test/types/return_types.wgsl
index c65b996..1ed77ff 100644
--- a/test/types/return_types.wgsl
+++ b/test/types/return_types.wgsl
@@ -13,6 +13,6 @@
 fn ret_arr() -> array<f32, 4> { return array<f32, 4>(); }
 fn ret_struct() -> S { return S(); }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
 }
diff --git a/test/types/return_types.wgsl.expected.wgsl b/test/types/return_types.wgsl.expected.wgsl
index d34a095..c888b19 100644
--- a/test/types/return_types.wgsl.expected.wgsl
+++ b/test/types/return_types.wgsl.expected.wgsl
@@ -42,6 +42,6 @@
   return S();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
 }
diff --git a/test/types/sampler.wgsl b/test/types/sampler.wgsl
index 1085620..edeb51e 100644
--- a/test/types/sampler.wgsl
+++ b/test/types/sampler.wgsl
@@ -1,7 +1,7 @@
-[[group(0), binding(0)]] var s : sampler;
-[[group(0), binding(1)]] var sc : sampler_comparison;
+@group(0) @binding(0) var s : sampler;
+@group(0) @binding(1) var sc : sampler_comparison;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = s;
   _ = sc;
diff --git a/test/types/sampler.wgsl.expected.wgsl b/test/types/sampler.wgsl.expected.wgsl
index 315599b..3d873eb 100644
--- a/test/types/sampler.wgsl.expected.wgsl
+++ b/test/types/sampler.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var s : sampler;
+@group(0) @binding(0) var s : sampler;
 
-[[group(0), binding(1)]] var sc : sampler_comparison;
+@group(0) @binding(1) var sc : sampler_comparison;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = s;
   _ = sc;
diff --git a/test/types/struct_members.wgsl b/test/types/struct_members.wgsl
index 2bd0f33..e179bdb 100644
--- a/test/types/struct_members.wgsl
+++ b/test/types/struct_members.wgsl
@@ -15,7 +15,7 @@
   member_struct : S_inner;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let s : S = S();
 }
diff --git a/test/types/struct_members.wgsl.expected.wgsl b/test/types/struct_members.wgsl.expected.wgsl
index 7ff178c..6778410 100644
--- a/test/types/struct_members.wgsl.expected.wgsl
+++ b/test/types/struct_members.wgsl.expected.wgsl
@@ -15,7 +15,7 @@
   member_struct : S_inner;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   let s : S = S();
 }
diff --git a/test/types/texture/depth/2d.wgsl b/test/types/texture/depth/2d.wgsl
index 853e277..e3a53cd 100644
--- a/test/types/texture/depth/2d.wgsl
+++ b/test/types/texture/depth/2d.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_2d;
+@group(0) @binding(0) var t_f : texture_depth_2d;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/2d.wgsl.expected.wgsl b/test/types/texture/depth/2d.wgsl.expected.wgsl
index 853e277..e3a53cd 100644
--- a/test/types/texture/depth/2d.wgsl.expected.wgsl
+++ b/test/types/texture/depth/2d.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_2d;
+@group(0) @binding(0) var t_f : texture_depth_2d;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/2d_array.wgsl b/test/types/texture/depth/2d_array.wgsl
index 9338fe5..e6fac8c 100644
--- a/test/types/texture/depth/2d_array.wgsl
+++ b/test/types/texture/depth/2d_array.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_2d_array;
+@group(0) @binding(0) var t_f : texture_depth_2d_array;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/2d_array.wgsl.expected.wgsl b/test/types/texture/depth/2d_array.wgsl.expected.wgsl
index 9338fe5..e6fac8c 100644
--- a/test/types/texture/depth/2d_array.wgsl.expected.wgsl
+++ b/test/types/texture/depth/2d_array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_2d_array;
+@group(0) @binding(0) var t_f : texture_depth_2d_array;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/cube.wgsl b/test/types/texture/depth/cube.wgsl
index bd16ce8..785b96c 100644
--- a/test/types/texture/depth/cube.wgsl
+++ b/test/types/texture/depth/cube.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_cube;
+@group(0) @binding(0) var t_f : texture_depth_cube;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/cube.wgsl.expected.wgsl b/test/types/texture/depth/cube.wgsl.expected.wgsl
index bd16ce8..785b96c 100644
--- a/test/types/texture/depth/cube.wgsl.expected.wgsl
+++ b/test/types/texture/depth/cube.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_cube;
+@group(0) @binding(0) var t_f : texture_depth_cube;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/cube_array.wgsl b/test/types/texture/depth/cube_array.wgsl
index d30008f..0e1b07e 100644
--- a/test/types/texture/depth/cube_array.wgsl
+++ b/test/types/texture/depth/cube_array.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_cube_array;
+@group(0) @binding(0) var t_f : texture_depth_cube_array;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/depth/cube_array.wgsl.expected.wgsl b/test/types/texture/depth/cube_array.wgsl.expected.wgsl
index d30008f..0e1b07e 100644
--- a/test/types/texture/depth/cube_array.wgsl.expected.wgsl
+++ b/test/types/texture/depth/cube_array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[group(0), binding(0)]] var t_f : texture_depth_cube_array;
+@group(0) @binding(0) var t_f : texture_depth_cube_array;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
 }
diff --git a/test/types/texture/multisampled/2d.wgsl b/test/types/texture/multisampled/2d.wgsl
index 9de9f26..76521e5 100644
--- a/test/types/texture/multisampled/2d.wgsl
+++ b/test/types/texture/multisampled/2d.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_multisampled_2d<f32>;
-[[group(0), binding(1)]] var t_i : texture_multisampled_2d<i32>;
-[[group(0), binding(2)]] var t_u : texture_multisampled_2d<u32>;
+@group(0) @binding(0) var t_f : texture_multisampled_2d<f32>;
+@group(0) @binding(1) var t_i : texture_multisampled_2d<i32>;
+@group(0) @binding(2) var t_u : texture_multisampled_2d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/multisampled/2d.wgsl.expected.wgsl b/test/types/texture/multisampled/2d.wgsl.expected.wgsl
index 4c078ca..d8eb77b 100644
--- a/test/types/texture/multisampled/2d.wgsl.expected.wgsl
+++ b/test/types/texture/multisampled/2d.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_multisampled_2d<f32>;
+@group(0) @binding(0) var t_f : texture_multisampled_2d<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_multisampled_2d<i32>;
+@group(0) @binding(1) var t_i : texture_multisampled_2d<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_multisampled_2d<u32>;
+@group(0) @binding(2) var t_u : texture_multisampled_2d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/1d.wgsl b/test/types/texture/sampled/1d.wgsl
index bfc4cf0..ed97090 100644
--- a/test/types/texture/sampled/1d.wgsl
+++ b/test/types/texture/sampled/1d.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_1d<f32>;
-[[group(0), binding(1)]] var t_i : texture_1d<i32>;
-[[group(0), binding(2)]] var t_u : texture_1d<u32>;
+@group(0) @binding(0) var t_f : texture_1d<f32>;
+@group(0) @binding(1) var t_i : texture_1d<i32>;
+@group(0) @binding(2) var t_u : texture_1d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/1d.wgsl.expected.wgsl b/test/types/texture/sampled/1d.wgsl.expected.wgsl
index a14ff96..565089e 100644
--- a/test/types/texture/sampled/1d.wgsl.expected.wgsl
+++ b/test/types/texture/sampled/1d.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_1d<f32>;
+@group(0) @binding(0) var t_f : texture_1d<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_1d<i32>;
+@group(0) @binding(1) var t_i : texture_1d<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_1d<u32>;
+@group(0) @binding(2) var t_u : texture_1d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/2d.wgsl b/test/types/texture/sampled/2d.wgsl
index eac8459..b6be42b 100644
--- a/test/types/texture/sampled/2d.wgsl
+++ b/test/types/texture/sampled/2d.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_2d<f32>;
-[[group(0), binding(1)]] var t_i : texture_2d<i32>;
-[[group(0), binding(2)]] var t_u : texture_2d<u32>;
+@group(0) @binding(0) var t_f : texture_2d<f32>;
+@group(0) @binding(1) var t_i : texture_2d<i32>;
+@group(0) @binding(2) var t_u : texture_2d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/2d.wgsl.expected.wgsl b/test/types/texture/sampled/2d.wgsl.expected.wgsl
index 7536291..007b85f 100644
--- a/test/types/texture/sampled/2d.wgsl.expected.wgsl
+++ b/test/types/texture/sampled/2d.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_2d<f32>;
+@group(0) @binding(0) var t_f : texture_2d<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_2d<i32>;
+@group(0) @binding(1) var t_i : texture_2d<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_2d<u32>;
+@group(0) @binding(2) var t_u : texture_2d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/2d_array.wgsl b/test/types/texture/sampled/2d_array.wgsl
index ff687c1..1dcfc6c 100644
--- a/test/types/texture/sampled/2d_array.wgsl
+++ b/test/types/texture/sampled/2d_array.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_2d_array<f32>;
-[[group(0), binding(1)]] var t_i : texture_2d_array<i32>;
-[[group(0), binding(2)]] var t_u : texture_2d_array<u32>;
+@group(0) @binding(0) var t_f : texture_2d_array<f32>;
+@group(0) @binding(1) var t_i : texture_2d_array<i32>;
+@group(0) @binding(2) var t_u : texture_2d_array<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/2d_array.wgsl.expected.wgsl b/test/types/texture/sampled/2d_array.wgsl.expected.wgsl
index 487e672..5201bbe 100644
--- a/test/types/texture/sampled/2d_array.wgsl.expected.wgsl
+++ b/test/types/texture/sampled/2d_array.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_2d_array<f32>;
+@group(0) @binding(0) var t_f : texture_2d_array<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_2d_array<i32>;
+@group(0) @binding(1) var t_i : texture_2d_array<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_2d_array<u32>;
+@group(0) @binding(2) var t_u : texture_2d_array<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/3d.wgsl b/test/types/texture/sampled/3d.wgsl
index cd8f0ec..37a525e 100644
--- a/test/types/texture/sampled/3d.wgsl
+++ b/test/types/texture/sampled/3d.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_3d<f32>;
-[[group(0), binding(1)]] var t_i : texture_3d<i32>;
-[[group(0), binding(2)]] var t_u : texture_3d<u32>;
+@group(0) @binding(0) var t_f : texture_3d<f32>;
+@group(0) @binding(1) var t_i : texture_3d<i32>;
+@group(0) @binding(2) var t_u : texture_3d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/3d.wgsl.expected.wgsl b/test/types/texture/sampled/3d.wgsl.expected.wgsl
index ddfc2db..747bc8f 100644
--- a/test/types/texture/sampled/3d.wgsl.expected.wgsl
+++ b/test/types/texture/sampled/3d.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_3d<f32>;
+@group(0) @binding(0) var t_f : texture_3d<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_3d<i32>;
+@group(0) @binding(1) var t_i : texture_3d<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_3d<u32>;
+@group(0) @binding(2) var t_u : texture_3d<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/cube.wgsl b/test/types/texture/sampled/cube.wgsl
index 3e1d8f0..89859e9 100644
--- a/test/types/texture/sampled/cube.wgsl
+++ b/test/types/texture/sampled/cube.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_cube<f32>;
-[[group(0), binding(1)]] var t_i : texture_cube<i32>;
-[[group(0), binding(2)]] var t_u : texture_cube<u32>;
+@group(0) @binding(0) var t_f : texture_cube<f32>;
+@group(0) @binding(1) var t_i : texture_cube<i32>;
+@group(0) @binding(2) var t_u : texture_cube<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/cube.wgsl.expected.wgsl b/test/types/texture/sampled/cube.wgsl.expected.wgsl
index 151c68f..28c6881 100644
--- a/test/types/texture/sampled/cube.wgsl.expected.wgsl
+++ b/test/types/texture/sampled/cube.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_cube<f32>;
+@group(0) @binding(0) var t_f : texture_cube<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_cube<i32>;
+@group(0) @binding(1) var t_i : texture_cube<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_cube<u32>;
+@group(0) @binding(2) var t_u : texture_cube<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/cube_array.wgsl b/test/types/texture/sampled/cube_array.wgsl
index e3bb1b1..c7249c8 100644
--- a/test/types/texture/sampled/cube_array.wgsl
+++ b/test/types/texture/sampled/cube_array.wgsl
@@ -1,8 +1,8 @@
-[[group(0), binding(0)]] var t_f : texture_cube_array<f32>;
-[[group(0), binding(1)]] var t_i : texture_cube_array<i32>;
-[[group(0), binding(2)]] var t_u : texture_cube_array<u32>;
+@group(0) @binding(0) var t_f : texture_cube_array<f32>;
+@group(0) @binding(1) var t_i : texture_cube_array<i32>;
+@group(0) @binding(2) var t_u : texture_cube_array<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/sampled/cube_array.wgsl.expected.wgsl b/test/types/texture/sampled/cube_array.wgsl.expected.wgsl
index bb5c804..12dc114 100644
--- a/test/types/texture/sampled/cube_array.wgsl.expected.wgsl
+++ b/test/types/texture/sampled/cube_array.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
-[[group(0), binding(0)]] var t_f : texture_cube_array<f32>;
+@group(0) @binding(0) var t_f : texture_cube_array<f32>;
 
-[[group(0), binding(1)]] var t_i : texture_cube_array<i32>;
+@group(0) @binding(1) var t_i : texture_cube_array<i32>;
 
-[[group(0), binding(2)]] var t_u : texture_cube_array<u32>;
+@group(0) @binding(2) var t_u : texture_cube_array<u32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_f;
   _ = t_i;
diff --git a/test/types/texture/storage/1d.wgsl b/test/types/texture/storage/1d.wgsl
index 939b921..7adad9e 100644
--- a/test/types/texture/storage/1d.wgsl
+++ b/test/types/texture/storage/1d.wgsl
@@ -1,21 +1,21 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_1d<rgba8unorm, write>;
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_1d<rgba8snorm, write>;
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_1d<rgba8uint, write>;
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_1d<rgba8sint, write>;
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_1d<rgba16uint, write>;
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_1d<rgba16sint, write>;
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_1d<rgba16float, write>;
-[[group(0), binding(7)]] var t_r32uint : texture_storage_1d<r32uint, write>;
-[[group(0), binding(8)]] var t_r32sint : texture_storage_1d<r32sint, write>;
-[[group(0), binding(9)]] var t_r32float : texture_storage_1d<r32float, write>;
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_1d<rg32uint, write>;
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_1d<rg32sint, write>;
-[[group(0), binding(12)]] var t_rg32float : texture_storage_1d<rg32float, write>;
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_1d<rgba32uint, write>;
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_1d<rgba32sint, write>;
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_1d<rgba32float, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_1d<rgba8unorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_1d<rgba8snorm, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_1d<rgba8uint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_1d<rgba8sint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_1d<rgba16uint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_1d<rgba16sint, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_1d<rgba16float, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_1d<r32uint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_1d<r32sint, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_1d<r32float, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_1d<rg32uint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_1d<rg32sint, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_1d<rg32float, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_1d<rgba32uint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_1d<rgba32sint, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_1d<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/1d.wgsl.expected.wgsl b/test/types/texture/storage/1d.wgsl.expected.wgsl
index 72ebb80..a3e5555 100644
--- a/test/types/texture/storage/1d.wgsl.expected.wgsl
+++ b/test/types/texture/storage/1d.wgsl.expected.wgsl
@@ -1,36 +1,36 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_1d<rgba8unorm, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_1d<rgba8unorm, write>;
 
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_1d<rgba8snorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_1d<rgba8snorm, write>;
 
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_1d<rgba8uint, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_1d<rgba8uint, write>;
 
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_1d<rgba8sint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_1d<rgba8sint, write>;
 
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_1d<rgba16uint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_1d<rgba16uint, write>;
 
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_1d<rgba16sint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_1d<rgba16sint, write>;
 
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_1d<rgba16float, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_1d<rgba16float, write>;
 
-[[group(0), binding(7)]] var t_r32uint : texture_storage_1d<r32uint, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_1d<r32uint, write>;
 
-[[group(0), binding(8)]] var t_r32sint : texture_storage_1d<r32sint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_1d<r32sint, write>;
 
-[[group(0), binding(9)]] var t_r32float : texture_storage_1d<r32float, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_1d<r32float, write>;
 
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_1d<rg32uint, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_1d<rg32uint, write>;
 
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_1d<rg32sint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_1d<rg32sint, write>;
 
-[[group(0), binding(12)]] var t_rg32float : texture_storage_1d<rg32float, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_1d<rg32float, write>;
 
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_1d<rgba32uint, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_1d<rgba32uint, write>;
 
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_1d<rgba32sint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_1d<rgba32sint, write>;
 
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_1d<rgba32float, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_1d<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/2d.wgsl b/test/types/texture/storage/2d.wgsl
index 0ea57e9..44d0dfd 100644
--- a/test/types/texture/storage/2d.wgsl
+++ b/test/types/texture/storage/2d.wgsl
@@ -1,21 +1,21 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_2d<rgba8unorm, write>;
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_2d<rgba8snorm, write>;
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_2d<rgba8uint, write>;
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_2d<rgba8sint, write>;
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_2d<rgba16uint, write>;
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_2d<rgba16sint, write>;
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_2d<rgba16float, write>;
-[[group(0), binding(7)]] var t_r32uint : texture_storage_2d<r32uint, write>;
-[[group(0), binding(8)]] var t_r32sint : texture_storage_2d<r32sint, write>;
-[[group(0), binding(9)]] var t_r32float : texture_storage_2d<r32float, write>;
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_2d<rg32uint, write>;
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_2d<rg32sint, write>;
-[[group(0), binding(12)]] var t_rg32float : texture_storage_2d<rg32float, write>;
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_2d<rgba32uint, write>;
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_2d<rgba32sint, write>;
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_2d<rgba32float, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_2d<rgba8unorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_2d<rgba8snorm, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_2d<rgba8uint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_2d<rgba8sint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_2d<rgba16uint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_2d<rgba16sint, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_2d<rgba16float, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_2d<r32uint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_2d<r32sint, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_2d<r32float, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_2d<rg32uint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_2d<rg32sint, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_2d<rg32float, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_2d<rgba32uint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_2d<rgba32sint, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_2d<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/2d.wgsl.expected.wgsl b/test/types/texture/storage/2d.wgsl.expected.wgsl
index 960e724..97824ad 100644
--- a/test/types/texture/storage/2d.wgsl.expected.wgsl
+++ b/test/types/texture/storage/2d.wgsl.expected.wgsl
@@ -1,36 +1,36 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_2d<rgba8unorm, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_2d<rgba8unorm, write>;
 
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_2d<rgba8snorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_2d<rgba8snorm, write>;
 
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_2d<rgba8uint, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_2d<rgba8uint, write>;
 
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_2d<rgba8sint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_2d<rgba8sint, write>;
 
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_2d<rgba16uint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_2d<rgba16uint, write>;
 
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_2d<rgba16sint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_2d<rgba16sint, write>;
 
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_2d<rgba16float, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_2d<rgba16float, write>;
 
-[[group(0), binding(7)]] var t_r32uint : texture_storage_2d<r32uint, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_2d<r32uint, write>;
 
-[[group(0), binding(8)]] var t_r32sint : texture_storage_2d<r32sint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_2d<r32sint, write>;
 
-[[group(0), binding(9)]] var t_r32float : texture_storage_2d<r32float, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_2d<r32float, write>;
 
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_2d<rg32uint, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_2d<rg32uint, write>;
 
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_2d<rg32sint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_2d<rg32sint, write>;
 
-[[group(0), binding(12)]] var t_rg32float : texture_storage_2d<rg32float, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_2d<rg32float, write>;
 
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_2d<rgba32uint, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_2d<rgba32uint, write>;
 
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_2d<rgba32sint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_2d<rgba32sint, write>;
 
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_2d<rgba32float, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_2d<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/2d_array.wgsl b/test/types/texture/storage/2d_array.wgsl
index 15a3f80..6919fda 100644
--- a/test/types/texture/storage/2d_array.wgsl
+++ b/test/types/texture/storage/2d_array.wgsl
@@ -1,21 +1,21 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_2d_array<rgba8unorm, write>;
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_2d_array<rgba8snorm, write>;
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_2d_array<rgba8uint, write>;
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_2d_array<rgba8sint, write>;
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_2d_array<rgba16uint, write>;
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_2d_array<rgba16sint, write>;
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_2d_array<rgba16float, write>;
-[[group(0), binding(7)]] var t_r32uint : texture_storage_2d_array<r32uint, write>;
-[[group(0), binding(8)]] var t_r32sint : texture_storage_2d_array<r32sint, write>;
-[[group(0), binding(9)]] var t_r32float : texture_storage_2d_array<r32float, write>;
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_2d_array<rg32uint, write>;
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_2d_array<rg32sint, write>;
-[[group(0), binding(12)]] var t_rg32float : texture_storage_2d_array<rg32float, write>;
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_2d_array<rgba32uint, write>;
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_2d_array<rgba32sint, write>;
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_2d_array<rgba32float, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_2d_array<rgba8unorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_2d_array<rgba8snorm, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_2d_array<rgba8uint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_2d_array<rgba8sint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_2d_array<rgba16uint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_2d_array<rgba16sint, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_2d_array<rgba16float, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_2d_array<r32uint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_2d_array<r32sint, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_2d_array<r32float, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_2d_array<rg32uint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_2d_array<rg32sint, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_2d_array<rg32float, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_2d_array<rgba32uint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_2d_array<rgba32sint, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_2d_array<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/2d_array.wgsl.expected.wgsl b/test/types/texture/storage/2d_array.wgsl.expected.wgsl
index c541689..c4aa337 100644
--- a/test/types/texture/storage/2d_array.wgsl.expected.wgsl
+++ b/test/types/texture/storage/2d_array.wgsl.expected.wgsl
@@ -1,36 +1,36 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_2d_array<rgba8unorm, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_2d_array<rgba8unorm, write>;
 
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_2d_array<rgba8snorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_2d_array<rgba8snorm, write>;
 
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_2d_array<rgba8uint, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_2d_array<rgba8uint, write>;
 
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_2d_array<rgba8sint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_2d_array<rgba8sint, write>;
 
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_2d_array<rgba16uint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_2d_array<rgba16uint, write>;
 
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_2d_array<rgba16sint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_2d_array<rgba16sint, write>;
 
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_2d_array<rgba16float, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_2d_array<rgba16float, write>;
 
-[[group(0), binding(7)]] var t_r32uint : texture_storage_2d_array<r32uint, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_2d_array<r32uint, write>;
 
-[[group(0), binding(8)]] var t_r32sint : texture_storage_2d_array<r32sint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_2d_array<r32sint, write>;
 
-[[group(0), binding(9)]] var t_r32float : texture_storage_2d_array<r32float, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_2d_array<r32float, write>;
 
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_2d_array<rg32uint, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_2d_array<rg32uint, write>;
 
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_2d_array<rg32sint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_2d_array<rg32sint, write>;
 
-[[group(0), binding(12)]] var t_rg32float : texture_storage_2d_array<rg32float, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_2d_array<rg32float, write>;
 
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_2d_array<rgba32uint, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_2d_array<rgba32uint, write>;
 
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_2d_array<rgba32sint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_2d_array<rgba32sint, write>;
 
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_2d_array<rgba32float, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_2d_array<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/3d.wgsl b/test/types/texture/storage/3d.wgsl
index 915be52..710d0d3 100644
--- a/test/types/texture/storage/3d.wgsl
+++ b/test/types/texture/storage/3d.wgsl
@@ -1,21 +1,21 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_3d<rgba8unorm, write>;
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_3d<rgba8snorm, write>;
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_3d<rgba8uint, write>;
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_3d<rgba8sint, write>;
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_3d<rgba16uint, write>;
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_3d<rgba16sint, write>;
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_3d<rgba16float, write>;
-[[group(0), binding(7)]] var t_r32uint : texture_storage_3d<r32uint, write>;
-[[group(0), binding(8)]] var t_r32sint : texture_storage_3d<r32sint, write>;
-[[group(0), binding(9)]] var t_r32float : texture_storage_3d<r32float, write>;
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_3d<rg32uint, write>;
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_3d<rg32sint, write>;
-[[group(0), binding(12)]] var t_rg32float : texture_storage_3d<rg32float, write>;
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_3d<rgba32uint, write>;
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_3d<rgba32sint, write>;
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_3d<rgba32float, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_3d<rgba8unorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_3d<rgba8snorm, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_3d<rgba8uint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_3d<rgba8sint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_3d<rgba16uint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_3d<rgba16sint, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_3d<rgba16float, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_3d<r32uint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_3d<r32sint, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_3d<r32float, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_3d<rg32uint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_3d<rg32sint, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_3d<rg32float, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_3d<rgba32uint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_3d<rgba32sint, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_3d<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/types/texture/storage/3d.wgsl.expected.wgsl b/test/types/texture/storage/3d.wgsl.expected.wgsl
index af8ae71..c3ba672 100644
--- a/test/types/texture/storage/3d.wgsl.expected.wgsl
+++ b/test/types/texture/storage/3d.wgsl.expected.wgsl
@@ -1,36 +1,36 @@
-[[group(0), binding(0)]] var t_rgba8unorm : texture_storage_3d<rgba8unorm, write>;
+@group(0) @binding(0) var t_rgba8unorm : texture_storage_3d<rgba8unorm, write>;
 
-[[group(0), binding(1)]] var t_rgba8snorm : texture_storage_3d<rgba8snorm, write>;
+@group(0) @binding(1) var t_rgba8snorm : texture_storage_3d<rgba8snorm, write>;
 
-[[group(0), binding(2)]] var t_rgba8uint : texture_storage_3d<rgba8uint, write>;
+@group(0) @binding(2) var t_rgba8uint : texture_storage_3d<rgba8uint, write>;
 
-[[group(0), binding(3)]] var t_rgba8sint : texture_storage_3d<rgba8sint, write>;
+@group(0) @binding(3) var t_rgba8sint : texture_storage_3d<rgba8sint, write>;
 
-[[group(0), binding(4)]] var t_rgba16uint : texture_storage_3d<rgba16uint, write>;
+@group(0) @binding(4) var t_rgba16uint : texture_storage_3d<rgba16uint, write>;
 
-[[group(0), binding(5)]] var t_rgba16sint : texture_storage_3d<rgba16sint, write>;
+@group(0) @binding(5) var t_rgba16sint : texture_storage_3d<rgba16sint, write>;
 
-[[group(0), binding(6)]] var t_rgba16float : texture_storage_3d<rgba16float, write>;
+@group(0) @binding(6) var t_rgba16float : texture_storage_3d<rgba16float, write>;
 
-[[group(0), binding(7)]] var t_r32uint : texture_storage_3d<r32uint, write>;
+@group(0) @binding(7) var t_r32uint : texture_storage_3d<r32uint, write>;
 
-[[group(0), binding(8)]] var t_r32sint : texture_storage_3d<r32sint, write>;
+@group(0) @binding(8) var t_r32sint : texture_storage_3d<r32sint, write>;
 
-[[group(0), binding(9)]] var t_r32float : texture_storage_3d<r32float, write>;
+@group(0) @binding(9) var t_r32float : texture_storage_3d<r32float, write>;
 
-[[group(0), binding(10)]] var t_rg32uint : texture_storage_3d<rg32uint, write>;
+@group(0) @binding(10) var t_rg32uint : texture_storage_3d<rg32uint, write>;
 
-[[group(0), binding(11)]] var t_rg32sint : texture_storage_3d<rg32sint, write>;
+@group(0) @binding(11) var t_rg32sint : texture_storage_3d<rg32sint, write>;
 
-[[group(0), binding(12)]] var t_rg32float : texture_storage_3d<rg32float, write>;
+@group(0) @binding(12) var t_rg32float : texture_storage_3d<rg32float, write>;
 
-[[group(0), binding(13)]] var t_rgba32uint : texture_storage_3d<rgba32uint, write>;
+@group(0) @binding(13) var t_rgba32uint : texture_storage_3d<rgba32uint, write>;
 
-[[group(0), binding(14)]] var t_rgba32sint : texture_storage_3d<rgba32sint, write>;
+@group(0) @binding(14) var t_rgba32sint : texture_storage_3d<rgba32sint, write>;
 
-[[group(0), binding(15)]] var t_rgba32float : texture_storage_3d<rgba32float, write>;
+@group(0) @binding(15) var t_rgba32float : texture_storage_3d<rgba32float, write>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = t_rgba8unorm;
   _ = t_rgba8snorm;
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.hlsl
index ad191b8..545d602 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.hlsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl
index ad191b8..545d602 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm
index ad191b8..9e7e684 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm
@@ -1,20 +1,20 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-  }
-  var_1 = 5u;
-  return;
-}
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 5u ;
+return ;
 
-error: loop does not exit
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl
index ad191b8..545d602 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.hlsl
index 791ac1a..ed3372c 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.hlsl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl
index 791ac1a..ed3372c 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm
index 791ac1a..b9ead81 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm
@@ -1,30 +1,30 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      continue;
-    }
-    var_1 = 4u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+if true
+var_1 = 3u ;
+continue ;
 
-    continuing {
-      var_1 = 5u;
-    }
-  }
-  var_1 = 6u;
-  return;
-}
+var_1 = 4u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+var_1 = 5u ;
 
-error: loop does not exit
+
+var_1 = 6u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl
index 791ac1a..ed3372c 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.hlsl
index 776810f..167379a 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.hlsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl
index 776810f..167379a 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm
index 776810f..6c6758e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm
@@ -1,26 +1,26 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      continue;
-    }
-    var_1 = 4u;
-  }
-  var_1 = 6u;
-  return;
-}
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+if true
+var_1 = 3u ;
+continue ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 4u ;
 
-error: loop does not exit
+var_1 = 6u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl
index 776810f..167379a 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.hlsl
index 99d5de3..586a7db 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.hlsl
@@ -17,7 +17,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl
index 99d5de3..586a7db 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl
@@ -17,7 +17,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm
index 99d5de3..b06f4ca 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm
@@ -1,25 +1,25 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
 
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
+continuing
+var_1 = 4u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+var_1 = 5u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl
index 99d5de3..586a7db 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl
@@ -17,7 +17,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.hlsl
index d64a6b8..e76fca4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.hlsl
@@ -16,7 +16,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl
index d64a6b8..e76fca4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl
@@ -16,7 +16,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm
index d64a6b8..038fea8 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm
@@ -1,24 +1,24 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
 
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
+continuing
+var_1 = 4u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+var_1 = 5u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl
index d64a6b8..e76fca4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl
@@ -16,7 +16,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.hlsl
index d678069..cc547df 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.hlsl
@@ -32,7 +32,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl
index d678069..cc547df 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl
@@ -32,7 +32,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm
index d678069..341c905 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm
@@ -1,40 +1,40 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-          continue;
-        }
-        fallthrough;
-      }
-      case 50u: {
-        var_1 = 50u;
-      }
-      default: {
-      }
-    }
-    var_1 = 3u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+switch 42u
+case 40u
+var_1 = 40u ;
+if false
+continue ;
 
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
+fallthrough ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+case 50u
+var_1 = 50u ;
 
-error: loop does not exit
+default
+
+
+var_1 = 3u ;
+
+continuing
+var_1 = 4u ;
+
+
+var_1 = 5u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl
index d678069..cc547df 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl
@@ -32,7 +32,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.hlsl
index 6ee0306..181cd62 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.hlsl
@@ -33,7 +33,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl
index 6ee0306..181cd62 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl
@@ -33,7 +33,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm
index 6ee0306..a58bc55 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm
@@ -1,41 +1,41 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-        } else {
-          continue;
-        }
-        fallthrough;
-      }
-      case 50u: {
-        var_1 = 50u;
-      }
-      default: {
-      }
-    }
-    var_1 = 3u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+switch 42u
+case 40u
+var_1 = 40u ;
+if false
+else
+continue ;
 
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
+fallthrough ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+case 50u
+var_1 = 50u ;
 
-error: loop does not exit
+default
+
+
+var_1 = 3u ;
+
+continuing
+var_1 = 4u ;
+
+
+var_1 = 5u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl
index 6ee0306..181cd62 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl
@@ -33,7 +33,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.hlsl
index f1f3c5d..bd16703 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.hlsl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl
index f1f3c5d..bd16703 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm
index f1f3c5d..95953ca 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm
@@ -1,29 +1,29 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-      continue;
-    }
-    var_1 = 3u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+if false
+continue ;
 
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
+var_1 = 3u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+var_1 = 4u ;
 
-error: loop does not exit
+
+var_1 = 5u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl
index f1f3c5d..bd16703 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.hlsl
index d3f4646..a789380 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.hlsl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl
index d3f4646..a789380 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm
index d3f4646..faa5d1c 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm
@@ -1,30 +1,30 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-    } else {
-      continue;
-    }
-    var_1 = 3u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+if false
+else
+continue ;
 
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
+var_1 = 3u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+var_1 = 4u ;
 
-error: loop does not exit
+
+var_1 = 5u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl
index d3f4646..a789380 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.hlsl
index 7f23c27..ec64472 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.hlsl
@@ -24,7 +24,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl
index 7f23c27..ec64472 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl
@@ -24,7 +24,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm
index 7f23c27..b5d3c49 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm
@@ -1,32 +1,32 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      if (false) {
-        continue;
-      }
-    }
-    var_1 = 4u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+if true
+var_1 = 3u ;
+if false
+continue ;
 
-    continuing {
-      var_1 = 5u;
-    }
-  }
-  var_1 = 6u;
-  return;
-}
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 4u ;
 
-error: loop does not exit
+continuing
+var_1 = 5u ;
+
+
+var_1 = 6u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl
index 7f23c27..ec64472 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl
@@ -24,7 +24,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.hlsl
index b80786e..457c6ec 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.hlsl
@@ -25,7 +25,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl
index b80786e..457c6ec 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl
@@ -25,7 +25,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm
index b80786e..de9fe3c 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm
@@ -1,33 +1,33 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      if (false) {
-      } else {
-        continue;
-      }
-    }
-    var_1 = 4u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
+if true
+var_1 = 3u ;
+if false
+else
+continue ;
 
-    continuing {
-      var_1 = 5u;
-    }
-  }
-  var_1 = 6u;
-  return;
-}
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 4u ;
 
-error: loop does not exit
+continuing
+var_1 = 5u ;
+
+
+var_1 = 6u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl
index b80786e..457c6ec 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl
@@ -25,7 +25,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.hlsl
index 7b5bc4f..82610e2 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.hlsl
@@ -26,7 +26,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl
index 7b5bc4f..82610e2 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl
@@ -26,7 +26,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm
index 7b5bc4f..992c540 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm
@@ -1,34 +1,34 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 4u;
-        continue;
-      }
-      default: {
-      }
-    }
-    var_1 = 5u;
+fn main_1
+var_1 = 1u ;
+loop
+var_1 = 2u ;
+var_1 = 3u ;
+switch 42u
+case 40u
+var_1 = 4u ;
+continue ;
 
-    continuing {
-      var_1 = 6u;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
+default
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+var_1 = 5u ;
+
+continuing
+var_1 = 6u ;
+
+
+var_1 = 7u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl
index 7b5bc4f..82610e2 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl
@@ -26,7 +26,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.hlsl
index 90f16be..9a46eeb 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.hlsl
@@ -29,7 +29,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl
index 90f16be..9a46eeb 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl
@@ -29,7 +29,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm
index 90f16be..e31a3d5 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm
@@ -1,37 +1,37 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-        } else {
-          continue;
-        }
-      }
-      default: {
-      }
-    }
-    var_1 = 6u;
+fn main_1
+var_1 = 1u ;
+loop
+var_1 = 2u ;
+var_1 = 3u ;
+switch 42u
+case 40u
+var_1 = 40u ;
+if false
+else
+continue ;
 
-    continuing {
-      var_1 = 7u;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+default
 
-error: loop does not exit
+
+var_1 = 6u ;
+
+continuing
+var_1 = 7u ;
+
+
+var_1 = 8u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl
index 90f16be..9a46eeb 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl
@@ -29,7 +29,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.hlsl
index 79d355b..083e426 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.hlsl
@@ -28,7 +28,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl
index 79d355b..083e426 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl
@@ -28,7 +28,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm
index 79d355b..01ea61e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm
@@ -1,36 +1,36 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-          continue;
-        }
-      }
-      default: {
-      }
-    }
-    var_1 = 6u;
+fn main_1
+var_1 = 1u ;
+loop
+var_1 = 2u ;
+var_1 = 3u ;
+switch 42u
+case 40u
+var_1 = 40u ;
+if false
+continue ;
 
-    continuing {
-      var_1 = 7u;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+default
 
-error: loop does not exit
+
+var_1 = 6u ;
+
+continuing
+var_1 = 7u ;
+
+
+var_1 = 8u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl
index 79d355b..083e426 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl
@@ -28,7 +28,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.hlsl
index 54db413..2efe2a8 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.hlsl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl
index 54db413..2efe2a8 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm
index 54db413..e4c47d6 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm
@@ -1,21 +1,21 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
+fn main_1
+loop
 
-    continuing {
-      var_1 = 1u;
-    }
-  }
-  return;
-}
+continuing
+var_1 = 1u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl
index 54db413..2efe2a8 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.hlsl
index 8c9f743..12d2d6f 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.hlsl
@@ -10,7 +10,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl
index 8c9f743..12d2d6f 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl
@@ -10,7 +10,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
index 8c9f743..9348637 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
@@ -1,18 +1,18 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    var_1 = 1u;
-  }
-  return;
-}
+fn main_1
+loop
+var_1 = 1u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+return ;
 
-error: loop does not exit
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
index 8c9f743..12d2d6f 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
@@ -10,7 +10,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.hlsl
index 084d93f..5709df3 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.hlsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl
index 084d93f..5709df3 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm
index 084d93f..23786d8 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm
@@ -1,26 +1,26 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-      var_1 = 1u;
-      continue;
-    }
-    var_1 = 2u;
+fn main_1
+loop
+if false
+var_1 = 1u ;
+continue ;
 
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  return;
-}
+var_1 = 2u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+var_1 = 3u ;
 
-error: loop does not exit
+
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl
index 084d93f..5709df3 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.hlsl
index 7b5bc4f..82610e2 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.hlsl
@@ -26,7 +26,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl
index 7b5bc4f..82610e2 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl
@@ -26,7 +26,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm
index 7b5bc4f..992c540 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm
@@ -1,34 +1,34 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 4u;
-        continue;
-      }
-      default: {
-      }
-    }
-    var_1 = 5u;
+fn main_1
+var_1 = 1u ;
+loop
+var_1 = 2u ;
+var_1 = 3u ;
+switch 42u
+case 40u
+var_1 = 4u ;
+continue ;
 
-    continuing {
-      var_1 = 6u;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
+default
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+var_1 = 5u ;
+
+continuing
+var_1 = 6u ;
+
+
+var_1 = 7u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl
index 7b5bc4f..82610e2 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl
@@ -26,7 +26,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.hlsl
index d43665e..eb514ee 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.hlsl
@@ -14,7 +14,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl
index d43665e..eb514ee 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl
@@ -14,7 +14,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm
index d43665e..211cb2c 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm
@@ -1,22 +1,22 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    var_1 = 1u;
+fn main_1
+loop
+var_1 = 1u ;
 
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
+continuing
+var_1 = 2u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl
index d43665e..eb514ee 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl
@@ -14,7 +14,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.hlsl
index b7ad7d3..d538de1 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.hlsl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl
index b7ad7d3..d538de1 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm
index b7ad7d3..42119a0 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm
@@ -1,21 +1,21 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
+fn main_1
+loop
+if false
+else
+continue ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl
index b7ad7d3..d538de1 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.hlsl
index c9b1ed7..3122cf9 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.hlsl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl
index c9b1ed7..3122cf9 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm
index c9b1ed7..bf12209 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm
@@ -1,30 +1,30 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 10u;
-  loop {
-    var_1 = 20u;
-    if (false) {
-      var_1 = 30u;
-      continue;
-    } else {
-      var_1 = 40u;
-    }
+fn main_1
+var_1 = 10u ;
+loop
+var_1 = 20u ;
+if false
+var_1 = 30u ;
+continue ;
+else
+var_1 = 40u ;
 
-    continuing {
-      var_1 = 90u;
-    }
-  }
-  var_1 = 99u;
-  return;
-}
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+var_1 = 90u ;
 
-error: loop does not exit
+
+var_1 = 99u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl
index c9b1ed7..3122cf9 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl
@@ -22,7 +22,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.hlsl
index 084d93f..5709df3 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.hlsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl
index 084d93f..5709df3 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm
index 084d93f..23786d8 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm
@@ -1,26 +1,26 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-      var_1 = 1u;
-      continue;
-    }
-    var_1 = 2u;
+fn main_1
+loop
+if false
+var_1 = 1u ;
+continue ;
 
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  return;
-}
+var_1 = 2u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+var_1 = 3u ;
 
-error: loop does not exit
+
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl
index 084d93f..5709df3 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.hlsl
index 0fcda02..bac39a4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.hlsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl
index 0fcda02..bac39a4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm
index 0fcda02..f712098 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm
@@ -1,20 +1,20 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 999u ;
+return ;
 
-error: loop does not exit
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl
index 0fcda02..bac39a4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.hlsl
index 0fcda02..bac39a4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.hlsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl
index 0fcda02..bac39a4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm
index 0fcda02..f712098 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm
@@ -1,20 +1,20 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 999u ;
+return ;
 
-error: loop does not exit
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl
index 0fcda02..bac39a4 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.hlsl
index ae96510..74c752d 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.hlsl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl
index ae96510..74c752d 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm
index ae96510..bd2e4a6 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm
@@ -1,29 +1,29 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
 
-    continuing {
-      var_1 = 3u;
-      if (true) {
-        var_1 = 4u;
-      }
-      var_1 = 5u;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
+continuing
+var_1 = 3u ;
+if true
+var_1 = 4u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+var_1 = 5u ;
 
-error: loop does not exit
+
+var_1 = 999u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl
index ae96510..74c752d 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.hlsl
index 9e69952..13fc2c7 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.hlsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl
index 9e69952..13fc2c7 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm
index 9e69952..2688c57 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm
@@ -1,26 +1,26 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
 
-    continuing {
-      var_1 = 3u;
-      var_1 = 4u;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
+continuing
+var_1 = 3u ;
+var_1 = 4u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+var_1 = 999u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl
index 9e69952..13fc2c7 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl
@@ -18,7 +18,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.hlsl
index e32d9bd..cb60399 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.hlsl
@@ -17,7 +17,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl
index e32d9bd..cb60399 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl
@@ -17,7 +17,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm
index e32d9bd..7ba8ccb 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm
@@ -1,25 +1,25 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
+fn main_1
+var_1 = 0u ;
+loop
+var_1 = 1u ;
+var_1 = 2u ;
 
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
+continuing
+var_1 = 3u ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+var_1 = 999u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl
index e32d9bd..cb60399 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl
@@ -17,7 +17,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.hlsl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.hlsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm
index 32e75fb..03faabe 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm
@@ -1,20 +1,20 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
+fn main_1
+loop
+if false
+continue ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.hlsl
index b7ad7d3..d538de1 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.hlsl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl
index b7ad7d3..d538de1 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm
index b7ad7d3..42119a0 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm
@@ -1,21 +1,21 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
+fn main_1
+loop
+if false
+else
+continue ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl
index b7ad7d3..d538de1 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl
@@ -13,7 +13,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.hlsl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.hlsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm
index 32e75fb..03faabe 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm
@@ -1,20 +1,20 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
+fn main_1
+loop
+if false
+continue ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.hlsl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.hlsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm
index 32e75fb..03faabe 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm
@@ -1,20 +1,20 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
+fn main_1
+loop
+if false
+continue ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl
index 32e75fb..9de1e7e 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.hlsl
index 2d78e5b..461b205 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.hlsl
@@ -9,7 +9,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl
index 2d78e5b..461b205 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl
@@ -9,7 +9,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm
index 2d78e5b..6247458 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm
@@ -1,17 +1,17 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-var<private> var_1 : u32;
+var private var_1 u32 ;
 
-fn main_1() {
-  loop {
-  }
-  return;
-}
+fn main_1
+loop
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+return ;
 
-error: loop does not exit
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl
index 2d78e5b..461b205 100644
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl
@@ -9,7 +9,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.hlsl
index 016ae84..f7f27eb 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.hlsl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl
index 016ae84..f7f27eb 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm
index 016ae84..8d88c46 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm
@@ -1,29 +1,29 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2u>;
-};
+struct S
+field0 u32 ;
+field1 f32 ;
+field2 array u32 2u ;
+;
 
-fn main_1() {
-  var x_25 : u32;
-  let x_2 : u32 = (1u + 1u);
-  x_25 = 1u;
-  loop {
+fn main_1
+var x_25 u32 ;
+let x_2 u32 = 1u + 1u ;
+x_25 = 1u ;
+loop
 
-    continuing {
-      x_25 = x_2;
-    }
-  }
-  x_25 = 2u;
-  return;
-}
+continuing
+x_25 = x_2 ;
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
 
-error: loop does not exit
+x_25 = 2u ;
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl
index 016ae84..f7f27eb 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl
@@ -21,7 +21,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.hlsl
index f9ae993..099f55e 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.hlsl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.hlsl
@@ -38,7 +38,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl
index f9ae993..099f55e 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl
@@ -38,7 +38,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm
index f9ae993..5bc3ceb 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm
@@ -1,46 +1,46 @@
-SKIP: FAILED
+SKIP FAILED
 
 
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2u>;
-};
+struct S
+field0 u32 ;
+field1 f32 ;
+field2 array u32 2u ;
+;
 
-var<private> x_1 : u32;
+var private x_1 u32 ;
 
-var<private> x_17 : bool;
+var private x_17 bool ;
 
-fn main_1() {
-  let x_101 : bool = x_17;
-  loop {
-    var x_2_phi : u32;
-    var x_5_phi : u32;
-    x_2_phi = 0u;
-    x_5_phi = 1u;
-    loop {
-      var x_7 : u32;
-      let x_2 : u32 = x_2_phi;
-      let x_5 : u32 = x_5_phi;
-      let x_4 : u32 = (x_2 + 1u);
-      let x_6 : u32 = (x_4 + 1u);
-      if (x_101) {
-        break;
-      }
+fn main_1
+let x_101 bool = x_17 ;
+loop
+var x_2_phi u32 ;
+var x_5_phi u32 ;
+x_2_phi = 0u ;
+x_5_phi = 1u ;
+loop
+var x_7 u32 ;
+let x_2 u32 = x_2_phi ;
+let x_5 u32 = x_5_phi ;
+let x_4 u32 = x_2 + 1u ;
+let x_6 u32 = x_4 + 1u ;
+if x_101
+break ;
 
-      continuing {
-        x_7 = (x_4 + x_6);
-        x_2_phi = x_4;
-        x_5_phi = x_7;
-      }
-    }
-  }
-  return;
-}
 
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
+continuing
+x_7 = x_4 + x_6 ;
+x_2_phi = x_4 ;
+x_5_phi = x_7 ;
 
-error: loop does not exit
+
+
+return ;
+
+
+stage fragment
+fn main
+main_1 ;
+
+
+error loop does not exit
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl
index f9ae993..099f55e 100644
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl
+++ b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl
@@ -38,7 +38,7 @@
   return;
 }
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() {
   main_1();
 }
diff --git a/test/var/inferred/function.wgsl b/test/var/inferred/function.wgsl
index 0d39fe0..c1bea4c 100644
--- a/test/var/inferred/function.wgsl
+++ b/test/var/inferred/function.wgsl
@@ -33,7 +33,7 @@
     var v15 = ret_MyArray();

 }

 

-[[stage(fragment)]]

-fn main() -> [[location(0)]] vec4<f32> {

+@stage(fragment)

+fn main() -> @location(0) vec4<f32> {

     return vec4<f32>(0.0,0.0,0.0,0.0);

 }

diff --git a/test/var/inferred/function.wgsl.expected.wgsl b/test/var/inferred/function.wgsl.expected.wgsl
index 2c8b7ab..bd60a83 100644
--- a/test/var/inferred/function.wgsl.expected.wgsl
+++ b/test/var/inferred/function.wgsl.expected.wgsl
@@ -42,7 +42,7 @@
   var v15 = ret_MyArray();
 }
 
-[[stage(fragment)]]
-fn main() -> [[location(0)]] vec4<f32> {
+@stage(fragment)
+fn main() -> @location(0) vec4<f32> {
   return vec4<f32>(0.0, 0.0, 0.0, 0.0);
 }
diff --git a/test/var/initialization/function/array.wgsl b/test/var/initialization/function/array.wgsl
index 269c9ed..c261a3a 100644
--- a/test/var/initialization/function/array.wgsl
+++ b/test/var/initialization/function/array.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     var v : array<i32, 3>;
     _ = v;
diff --git a/test/var/initialization/function/array.wgsl.expected.wgsl b/test/var/initialization/function/array.wgsl.expected.wgsl
index 0dd6ece..8ff70f2 100644
--- a/test/var/initialization/function/array.wgsl.expected.wgsl
+++ b/test/var/initialization/function/array.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : array<i32, 3>;
   _ = v;
diff --git a/test/var/initialization/function/matrix.wgsl b/test/var/initialization/function/matrix.wgsl
index 7f3830d..ea336e8 100644
--- a/test/var/initialization/function/matrix.wgsl
+++ b/test/var/initialization/function/matrix.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     var v : mat2x3<f32>;
     _ = v;
diff --git a/test/var/initialization/function/matrix.wgsl.expected.wgsl b/test/var/initialization/function/matrix.wgsl.expected.wgsl
index f4fadc6..d8bb391 100644
--- a/test/var/initialization/function/matrix.wgsl.expected.wgsl
+++ b/test/var/initialization/function/matrix.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : mat2x3<f32>;
   _ = v;
diff --git a/test/var/initialization/function/scalar.wgsl b/test/var/initialization/function/scalar.wgsl
index d945843..5d3b86e 100644
--- a/test/var/initialization/function/scalar.wgsl
+++ b/test/var/initialization/function/scalar.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     var v : i32;
     _ = v;
diff --git a/test/var/initialization/function/scalar.wgsl.expected.wgsl b/test/var/initialization/function/scalar.wgsl.expected.wgsl
index 778a994..67ee18d 100644
--- a/test/var/initialization/function/scalar.wgsl.expected.wgsl
+++ b/test/var/initialization/function/scalar.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : i32;
   _ = v;
diff --git a/test/var/initialization/function/struct.wgsl b/test/var/initialization/function/struct.wgsl
index 5f80b50..55babed 100644
--- a/test/var/initialization/function/struct.wgsl
+++ b/test/var/initialization/function/struct.wgsl
@@ -3,7 +3,7 @@
     b : f32;
 };
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     var v : S;
     _ = v;
diff --git a/test/var/initialization/function/struct.wgsl.expected.wgsl b/test/var/initialization/function/struct.wgsl.expected.wgsl
index 538187c..2dd4381 100644
--- a/test/var/initialization/function/struct.wgsl.expected.wgsl
+++ b/test/var/initialization/function/struct.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   b : f32;
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : S;
   _ = v;
diff --git a/test/var/initialization/function/vector.wgsl b/test/var/initialization/function/vector.wgsl
index 95516f6..40bc481 100644
--- a/test/var/initialization/function/vector.wgsl
+++ b/test/var/initialization/function/vector.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     var v : vec3<i32>;
     _ = v;
diff --git a/test/var/initialization/function/vector.wgsl.expected.wgsl b/test/var/initialization/function/vector.wgsl.expected.wgsl
index 796b9e3..37600e5 100644
--- a/test/var/initialization/function/vector.wgsl.expected.wgsl
+++ b/test/var/initialization/function/vector.wgsl.expected.wgsl
@@ -1,4 +1,4 @@
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   var v : vec3<i32>;
   _ = v;
diff --git a/test/var/initialization/private/array.wgsl b/test/var/initialization/private/array.wgsl
index 8f7374a..f01730a 100644
--- a/test/var/initialization/private/array.wgsl
+++ b/test/var/initialization/private/array.wgsl
@@ -1,6 +1,6 @@
 var<private> v : array<i32, 3>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/private/array.wgsl.expected.wgsl b/test/var/initialization/private/array.wgsl.expected.wgsl
index 6f76127..ba967ec 100644
--- a/test/var/initialization/private/array.wgsl.expected.wgsl
+++ b/test/var/initialization/private/array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> v : array<i32, 3>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/private/matrix.wgsl b/test/var/initialization/private/matrix.wgsl
index 2530cc6..e46734c 100644
--- a/test/var/initialization/private/matrix.wgsl
+++ b/test/var/initialization/private/matrix.wgsl
@@ -1,6 +1,6 @@
 var<private> v : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/private/matrix.wgsl.expected.wgsl b/test/var/initialization/private/matrix.wgsl.expected.wgsl
index 73501a1..c3042ab 100644
--- a/test/var/initialization/private/matrix.wgsl.expected.wgsl
+++ b/test/var/initialization/private/matrix.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> v : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/private/scalar.wgsl b/test/var/initialization/private/scalar.wgsl
index 7c298cf..8e46653 100644
--- a/test/var/initialization/private/scalar.wgsl
+++ b/test/var/initialization/private/scalar.wgsl
@@ -1,6 +1,6 @@
 var<private> v : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/private/scalar.wgsl.expected.wgsl b/test/var/initialization/private/scalar.wgsl.expected.wgsl
index c412580..911081b 100644
--- a/test/var/initialization/private/scalar.wgsl.expected.wgsl
+++ b/test/var/initialization/private/scalar.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> v : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/private/struct.wgsl b/test/var/initialization/private/struct.wgsl
index d1b70f2..db44563 100644
--- a/test/var/initialization/private/struct.wgsl
+++ b/test/var/initialization/private/struct.wgsl
@@ -5,7 +5,7 @@
 
 var<private> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/private/struct.wgsl.expected.wgsl b/test/var/initialization/private/struct.wgsl.expected.wgsl
index a91da6a..6d46d0d 100644
--- a/test/var/initialization/private/struct.wgsl.expected.wgsl
+++ b/test/var/initialization/private/struct.wgsl.expected.wgsl
@@ -5,7 +5,7 @@
 
 var<private> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/private/vector.wgsl b/test/var/initialization/private/vector.wgsl
index 621a3ff..2af1bf5 100644
--- a/test/var/initialization/private/vector.wgsl
+++ b/test/var/initialization/private/vector.wgsl
@@ -1,6 +1,6 @@
 var<private> v : vec3<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/private/vector.wgsl.expected.wgsl b/test/var/initialization/private/vector.wgsl.expected.wgsl
index 7ed65cd..183418e 100644
--- a/test/var/initialization/private/vector.wgsl.expected.wgsl
+++ b/test/var/initialization/private/vector.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<private> v : vec3<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/workgroup/array.wgsl b/test/var/initialization/workgroup/array.wgsl
index 1a91ef5..1d9aa8b 100644
--- a/test/var/initialization/workgroup/array.wgsl
+++ b/test/var/initialization/workgroup/array.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : array<i32, 3>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/workgroup/array.wgsl.expected.wgsl b/test/var/initialization/workgroup/array.wgsl.expected.wgsl
index e9ea7eb..cc53b73 100644
--- a/test/var/initialization/workgroup/array.wgsl.expected.wgsl
+++ b/test/var/initialization/workgroup/array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : array<i32, 3>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/workgroup/matrix.wgsl b/test/var/initialization/workgroup/matrix.wgsl
index 2410685..f494319 100644
--- a/test/var/initialization/workgroup/matrix.wgsl
+++ b/test/var/initialization/workgroup/matrix.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/workgroup/matrix.wgsl.expected.wgsl b/test/var/initialization/workgroup/matrix.wgsl.expected.wgsl
index df1a415..62ce905 100644
--- a/test/var/initialization/workgroup/matrix.wgsl.expected.wgsl
+++ b/test/var/initialization/workgroup/matrix.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : mat2x3<f32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/workgroup/scalar.wgsl b/test/var/initialization/workgroup/scalar.wgsl
index b9fcda7..37c8a4f 100644
--- a/test/var/initialization/workgroup/scalar.wgsl
+++ b/test/var/initialization/workgroup/scalar.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/workgroup/scalar.wgsl.expected.wgsl b/test/var/initialization/workgroup/scalar.wgsl.expected.wgsl
index 4a2272a..3cfef70 100644
--- a/test/var/initialization/workgroup/scalar.wgsl.expected.wgsl
+++ b/test/var/initialization/workgroup/scalar.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/workgroup/struct.wgsl b/test/var/initialization/workgroup/struct.wgsl
index 4651335..5fa28ed 100644
--- a/test/var/initialization/workgroup/struct.wgsl
+++ b/test/var/initialization/workgroup/struct.wgsl
@@ -5,7 +5,7 @@
 
 var<workgroup> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/workgroup/struct.wgsl.expected.wgsl b/test/var/initialization/workgroup/struct.wgsl.expected.wgsl
index b67e95a..c42ae1c 100644
--- a/test/var/initialization/workgroup/struct.wgsl.expected.wgsl
+++ b/test/var/initialization/workgroup/struct.wgsl.expected.wgsl
@@ -5,7 +5,7 @@
 
 var<workgroup> v : S;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/initialization/workgroup/vector.wgsl b/test/var/initialization/workgroup/vector.wgsl
index c1ff6bb..37ff6f2 100644
--- a/test/var/initialization/workgroup/vector.wgsl
+++ b/test/var/initialization/workgroup/vector.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : vec3<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = v;
 }
diff --git a/test/var/initialization/workgroup/vector.wgsl.expected.wgsl b/test/var/initialization/workgroup/vector.wgsl.expected.wgsl
index a3aead5..a6f967c 100644
--- a/test/var/initialization/workgroup/vector.wgsl.expected.wgsl
+++ b/test/var/initialization/workgroup/vector.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 var<workgroup> v : vec3<i32>;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = v;
 }
diff --git a/test/var/override/named/no_init/bool.wgsl b/test/var/override/named/no_init/bool.wgsl
index 4b58e68..fe69ac3 100644
--- a/test/var/override/named/no_init/bool.wgsl
+++ b/test/var/override/named/no_init/bool.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : bool;
+@override let o : bool;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/no_init/bool.wgsl.expected.wgsl b/test/var/override/named/no_init/bool.wgsl.expected.wgsl
index 8fcab9b..c4b5efd 100644
--- a/test/var/override/named/no_init/bool.wgsl.expected.wgsl
+++ b/test/var/override/named/no_init/bool.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : bool;
+@override let o : bool;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/no_init/f32.wgsl b/test/var/override/named/no_init/f32.wgsl
index c09196d..5328e9d 100644
--- a/test/var/override/named/no_init/f32.wgsl
+++ b/test/var/override/named/no_init/f32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : f32;
+@override let o : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/no_init/f32.wgsl.expected.wgsl b/test/var/override/named/no_init/f32.wgsl.expected.wgsl
index 5e60be6..1d09452 100644
--- a/test/var/override/named/no_init/f32.wgsl.expected.wgsl
+++ b/test/var/override/named/no_init/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : f32;
+@override let o : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/no_init/i32.wgsl b/test/var/override/named/no_init/i32.wgsl
index 790c56d..0a3ed57 100644
--- a/test/var/override/named/no_init/i32.wgsl
+++ b/test/var/override/named/no_init/i32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : i32;
+@override let o : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/no_init/i32.wgsl.expected.wgsl b/test/var/override/named/no_init/i32.wgsl.expected.wgsl
index 56a81dd..92a7426 100644
--- a/test/var/override/named/no_init/i32.wgsl.expected.wgsl
+++ b/test/var/override/named/no_init/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : i32;
+@override let o : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/no_init/u32.wgsl b/test/var/override/named/no_init/u32.wgsl
index b4826d8..bce0c77 100644
--- a/test/var/override/named/no_init/u32.wgsl
+++ b/test/var/override/named/no_init/u32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : u32;
+@override let o : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/no_init/u32.wgsl.expected.wgsl b/test/var/override/named/no_init/u32.wgsl.expected.wgsl
index ad44144..31db066 100644
--- a/test/var/override/named/no_init/u32.wgsl.expected.wgsl
+++ b/test/var/override/named/no_init/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : u32;
+@override let o : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/val_init/bool.wgsl b/test/var/override/named/val_init/bool.wgsl
index 0cb9566..9edeffa 100644
--- a/test/var/override/named/val_init/bool.wgsl
+++ b/test/var/override/named/val_init/bool.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : bool = true;
+@override let o : bool = true;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/val_init/bool.wgsl.expected.wgsl b/test/var/override/named/val_init/bool.wgsl.expected.wgsl
index 8e9edf5..cbcd033 100644
--- a/test/var/override/named/val_init/bool.wgsl.expected.wgsl
+++ b/test/var/override/named/val_init/bool.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : bool = true;
+@override let o : bool = true;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/val_init/f32.wgsl b/test/var/override/named/val_init/f32.wgsl
index 904a8ad..a58f753 100644
--- a/test/var/override/named/val_init/f32.wgsl
+++ b/test/var/override/named/val_init/f32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : f32 = 1.0;
+@override let o : f32 = 1.0;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/val_init/f32.wgsl.expected.wgsl b/test/var/override/named/val_init/f32.wgsl.expected.wgsl
index 32660b8..18e6ceb 100644
--- a/test/var/override/named/val_init/f32.wgsl.expected.wgsl
+++ b/test/var/override/named/val_init/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : f32 = 1.0;
+@override let o : f32 = 1.0;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/val_init/i32.wgsl b/test/var/override/named/val_init/i32.wgsl
index c94ee67..642096d 100644
--- a/test/var/override/named/val_init/i32.wgsl
+++ b/test/var/override/named/val_init/i32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : i32 = 1;
+@override let o : i32 = 1;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/val_init/i32.wgsl.expected.wgsl b/test/var/override/named/val_init/i32.wgsl.expected.wgsl
index b897fd5..46adcb7 100644
--- a/test/var/override/named/val_init/i32.wgsl.expected.wgsl
+++ b/test/var/override/named/val_init/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : i32 = 1;
+@override let o : i32 = 1;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/val_init/u32.wgsl b/test/var/override/named/val_init/u32.wgsl
index 8c8df63..582f7ab 100644
--- a/test/var/override/named/val_init/u32.wgsl
+++ b/test/var/override/named/val_init/u32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : u32 = 1u;
+@override let o : u32 = 1u;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/val_init/u32.wgsl.expected.wgsl b/test/var/override/named/val_init/u32.wgsl.expected.wgsl
index 3a62e22..06b1aa0 100644
--- a/test/var/override/named/val_init/u32.wgsl.expected.wgsl
+++ b/test/var/override/named/val_init/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : u32 = 1u;
+@override let o : u32 = 1u;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/zero_init/bool.wgsl b/test/var/override/named/zero_init/bool.wgsl
index 1e03a45..8869f16 100644
--- a/test/var/override/named/zero_init/bool.wgsl
+++ b/test/var/override/named/zero_init/bool.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : bool = bool();
+@override let o : bool = bool();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/zero_init/bool.wgsl.expected.wgsl b/test/var/override/named/zero_init/bool.wgsl.expected.wgsl
index 511bd67..f686612 100644
--- a/test/var/override/named/zero_init/bool.wgsl.expected.wgsl
+++ b/test/var/override/named/zero_init/bool.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : bool = bool();
+@override let o : bool = bool();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/zero_init/f32.wgsl b/test/var/override/named/zero_init/f32.wgsl
index a47d934..4af2466 100644
--- a/test/var/override/named/zero_init/f32.wgsl
+++ b/test/var/override/named/zero_init/f32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : f32 = f32();
+@override let o : f32 = f32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/zero_init/f32.wgsl.expected.wgsl b/test/var/override/named/zero_init/f32.wgsl.expected.wgsl
index fe1468f..9398382 100644
--- a/test/var/override/named/zero_init/f32.wgsl.expected.wgsl
+++ b/test/var/override/named/zero_init/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : f32 = f32();
+@override let o : f32 = f32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/zero_init/i32.wgsl b/test/var/override/named/zero_init/i32.wgsl
index 6455227..132987a 100644
--- a/test/var/override/named/zero_init/i32.wgsl
+++ b/test/var/override/named/zero_init/i32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : i32 = i32();
+@override let o : i32 = i32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/zero_init/i32.wgsl.expected.wgsl b/test/var/override/named/zero_init/i32.wgsl.expected.wgsl
index 5cde670..afa82db 100644
--- a/test/var/override/named/zero_init/i32.wgsl.expected.wgsl
+++ b/test/var/override/named/zero_init/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : i32 = i32();
+@override let o : i32 = i32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/named/zero_init/u32.wgsl b/test/var/override/named/zero_init/u32.wgsl
index 9d1205e..047aeb5 100644
--- a/test/var/override/named/zero_init/u32.wgsl
+++ b/test/var/override/named/zero_init/u32.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : u32 = u32();
+@override let o : u32 = u32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/named/zero_init/u32.wgsl.expected.wgsl b/test/var/override/named/zero_init/u32.wgsl.expected.wgsl
index f9d5644..9146204c 100644
--- a/test/var/override/named/zero_init/u32.wgsl.expected.wgsl
+++ b/test/var/override/named/zero_init/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override]] let o : u32 = u32();
+@override let o : u32 = u32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/no_init/bool.wgsl b/test/var/override/numbered/no_init/bool.wgsl
index a8b81c7..407941d 100644
--- a/test/var/override/numbered/no_init/bool.wgsl
+++ b/test/var/override/numbered/no_init/bool.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : bool;
+@override(1234) let o : bool;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/no_init/bool.wgsl.expected.wgsl b/test/var/override/numbered/no_init/bool.wgsl.expected.wgsl
index e8d6daf..d51cd82 100644
--- a/test/var/override/numbered/no_init/bool.wgsl.expected.wgsl
+++ b/test/var/override/numbered/no_init/bool.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : bool;
+@override(1234) let o : bool;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/no_init/f32.wgsl b/test/var/override/numbered/no_init/f32.wgsl
index 95e9dfd..796c8ad 100644
--- a/test/var/override/numbered/no_init/f32.wgsl
+++ b/test/var/override/numbered/no_init/f32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : f32;
+@override(1234) let o : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/no_init/f32.wgsl.expected.wgsl b/test/var/override/numbered/no_init/f32.wgsl.expected.wgsl
index cabed6a..2315774 100644
--- a/test/var/override/numbered/no_init/f32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/no_init/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : f32;
+@override(1234) let o : f32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/no_init/i32.wgsl b/test/var/override/numbered/no_init/i32.wgsl
index 74846ef..5778c73 100644
--- a/test/var/override/numbered/no_init/i32.wgsl
+++ b/test/var/override/numbered/no_init/i32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : i32;
+@override(1234) let o : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/no_init/i32.wgsl.expected.wgsl b/test/var/override/numbered/no_init/i32.wgsl.expected.wgsl
index 68fb678..cdd1bdd 100644
--- a/test/var/override/numbered/no_init/i32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/no_init/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : i32;
+@override(1234) let o : i32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/no_init/u32.wgsl b/test/var/override/numbered/no_init/u32.wgsl
index 152c709..7992da9 100644
--- a/test/var/override/numbered/no_init/u32.wgsl
+++ b/test/var/override/numbered/no_init/u32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : u32;
+@override(1234) let o : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/no_init/u32.wgsl.expected.wgsl b/test/var/override/numbered/no_init/u32.wgsl.expected.wgsl
index 40cb6c0..2a2fc96 100644
--- a/test/var/override/numbered/no_init/u32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/no_init/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : u32;
+@override(1234) let o : u32;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/val_init/bool.wgsl b/test/var/override/numbered/val_init/bool.wgsl
index c29ec30..91cbe00 100644
--- a/test/var/override/numbered/val_init/bool.wgsl
+++ b/test/var/override/numbered/val_init/bool.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : bool = true;
+@override(1234) let o : bool = true;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/val_init/bool.wgsl.expected.wgsl b/test/var/override/numbered/val_init/bool.wgsl.expected.wgsl
index 2ab9051..57c6d05 100644
--- a/test/var/override/numbered/val_init/bool.wgsl.expected.wgsl
+++ b/test/var/override/numbered/val_init/bool.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : bool = true;
+@override(1234) let o : bool = true;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/val_init/f32.wgsl b/test/var/override/numbered/val_init/f32.wgsl
index 649d4e8..7251986 100644
--- a/test/var/override/numbered/val_init/f32.wgsl
+++ b/test/var/override/numbered/val_init/f32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : f32 = 1.0;
+@override(1234) let o : f32 = 1.0;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/val_init/f32.wgsl.expected.wgsl b/test/var/override/numbered/val_init/f32.wgsl.expected.wgsl
index bb12693..d2a4882 100644
--- a/test/var/override/numbered/val_init/f32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/val_init/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : f32 = 1.0;
+@override(1234) let o : f32 = 1.0;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/val_init/i32.wgsl b/test/var/override/numbered/val_init/i32.wgsl
index d867f6a..1036ba5 100644
--- a/test/var/override/numbered/val_init/i32.wgsl
+++ b/test/var/override/numbered/val_init/i32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : i32 = 1;
+@override(1234) let o : i32 = 1;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/val_init/i32.wgsl.expected.wgsl b/test/var/override/numbered/val_init/i32.wgsl.expected.wgsl
index 592dd92..8f8e5f1 100644
--- a/test/var/override/numbered/val_init/i32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/val_init/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : i32 = 1;
+@override(1234) let o : i32 = 1;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/val_init/u32.wgsl b/test/var/override/numbered/val_init/u32.wgsl
index 22c55f2..3ee87d3 100644
--- a/test/var/override/numbered/val_init/u32.wgsl
+++ b/test/var/override/numbered/val_init/u32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : u32 = 1u;
+@override(1234) let o : u32 = 1u;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/val_init/u32.wgsl.expected.wgsl b/test/var/override/numbered/val_init/u32.wgsl.expected.wgsl
index 18bb63b..4712fda 100644
--- a/test/var/override/numbered/val_init/u32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/val_init/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : u32 = 1u;
+@override(1234) let o : u32 = 1u;
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/bool.wgsl b/test/var/override/numbered/zero_init/bool.wgsl
index 894b584..27a68b3 100644
--- a/test/var/override/numbered/zero_init/bool.wgsl
+++ b/test/var/override/numbered/zero_init/bool.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : bool = bool();
+@override(1234) let o : bool = bool();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/bool.wgsl.expected.wgsl b/test/var/override/numbered/zero_init/bool.wgsl.expected.wgsl
index 653b1da..2e68a0e 100644
--- a/test/var/override/numbered/zero_init/bool.wgsl.expected.wgsl
+++ b/test/var/override/numbered/zero_init/bool.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : bool = bool();
+@override(1234) let o : bool = bool();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/f32.wgsl b/test/var/override/numbered/zero_init/f32.wgsl
index 0a3908c..a022f0b 100644
--- a/test/var/override/numbered/zero_init/f32.wgsl
+++ b/test/var/override/numbered/zero_init/f32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : f32 = f32();
+@override(1234) let o : f32 = f32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/f32.wgsl.expected.wgsl b/test/var/override/numbered/zero_init/f32.wgsl.expected.wgsl
index 589751b..e5d2086 100644
--- a/test/var/override/numbered/zero_init/f32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/zero_init/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : f32 = f32();
+@override(1234) let o : f32 = f32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/i32.wgsl b/test/var/override/numbered/zero_init/i32.wgsl
index 4dd63fd..448f14a 100644
--- a/test/var/override/numbered/zero_init/i32.wgsl
+++ b/test/var/override/numbered/zero_init/i32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : i32 = i32();
+@override(1234) let o : i32 = i32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/i32.wgsl.expected.wgsl b/test/var/override/numbered/zero_init/i32.wgsl.expected.wgsl
index 8c0adca..c250241 100644
--- a/test/var/override/numbered/zero_init/i32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/zero_init/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : i32 = i32();
+@override(1234) let o : i32 = i32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/u32.wgsl b/test/var/override/numbered/zero_init/u32.wgsl
index d525204..ff50cba 100644
--- a/test/var/override/numbered/zero_init/u32.wgsl
+++ b/test/var/override/numbered/zero_init/u32.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : u32 = u32();
+@override(1234) let o : u32 = u32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
     _ = o;
 }
diff --git a/test/var/override/numbered/zero_init/u32.wgsl.expected.wgsl b/test/var/override/numbered/zero_init/u32.wgsl.expected.wgsl
index d45213b..1dc6121 100644
--- a/test/var/override/numbered/zero_init/u32.wgsl.expected.wgsl
+++ b/test/var/override/numbered/zero_init/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
-[[override(1234)]] let o : u32 = u32();
+@override(1234) let o : u32 = u32();
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main() {
   _ = o;
 }
diff --git a/test/var/uses/many_workgroup_vars.wgsl b/test/var/uses/many_workgroup_vars.wgsl
index 7857da9..56df492 100644
--- a/test/var/uses/many_workgroup_vars.wgsl
+++ b/test/var/uses/many_workgroup_vars.wgsl
@@ -99,8 +99,8 @@
 var<workgroup> m98 : mat2x2<f32>;
 var<workgroup> m99 : mat2x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
-fn tint_symbol([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn tint_symbol(@builtin(local_invocation_index) idx : u32) {
   m00[0][0] = 1.0;
   m01[0][0] = 1.0;
   m02[0][0] = 1.0;
@@ -201,4 +201,4 @@
   m97[0][0] = 1.0;
   m98[0][0] = 1.0;
   m99[0][0] = 1.0;
-}
\ No newline at end of file
+}
diff --git a/test/var/uses/many_workgroup_vars.wgsl.expected.wgsl b/test/var/uses/many_workgroup_vars.wgsl.expected.wgsl
index 873700f..9d1822e 100644
--- a/test/var/uses/many_workgroup_vars.wgsl.expected.wgsl
+++ b/test/var/uses/many_workgroup_vars.wgsl.expected.wgsl
@@ -198,8 +198,8 @@
 
 var<workgroup> m99 : mat2x2<f32>;
 
-[[stage(compute), workgroup_size(1)]]
-fn tint_symbol([[builtin(local_invocation_index)]] idx : u32) {
+@stage(compute) @workgroup_size(1)
+fn tint_symbol(@builtin(local_invocation_index) idx : u32) {
   m00[0][0] = 1.0;
   m01[0][0] = 1.0;
   m02[0][0] = 1.0;
diff --git a/test/var/uses/private.wgsl b/test/var/uses/private.wgsl
index a08e705..6ec289a 100644
--- a/test/var/uses/private.wgsl
+++ b/test/var/uses/private.wgsl
@@ -25,25 +25,25 @@
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main1() {
   a = 42;
   uses_a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main2() {
   b = 7;
   uses_b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main3() {
   outer();
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main4() {
   no_uses();
 }
diff --git a/test/var/uses/private.wgsl.expected.wgsl b/test/var/uses/private.wgsl.expected.wgsl
index ae27b427..4770447 100644
--- a/test/var/uses/private.wgsl.expected.wgsl
+++ b/test/var/uses/private.wgsl.expected.wgsl
@@ -27,25 +27,25 @@
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main1() {
   a = 42;
   uses_a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main2() {
   b = 7;
   uses_b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main3() {
   outer();
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main4() {
   no_uses();
 }
diff --git a/test/var/uses/workgroup.wgsl b/test/var/uses/workgroup.wgsl
index d47c3da..23736b5 100644
--- a/test/var/uses/workgroup.wgsl
+++ b/test/var/uses/workgroup.wgsl
@@ -25,25 +25,25 @@
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main1() {
   a = 42;
   uses_a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main2() {
   b = 7;
   uses_b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main3() {
   outer();
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main4() {
   no_uses();
 }
diff --git a/test/var/uses/workgroup.wgsl.expected.wgsl b/test/var/uses/workgroup.wgsl.expected.wgsl
index 95d9b6b..a3386fe 100644
--- a/test/var/uses/workgroup.wgsl.expected.wgsl
+++ b/test/var/uses/workgroup.wgsl.expected.wgsl
@@ -27,25 +27,25 @@
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main1() {
   a = 42;
   uses_a();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main2() {
   b = 7;
   uses_b();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main3() {
   outer();
   no_uses();
 }
 
-[[stage(compute), workgroup_size(1)]]
+@stage(compute) @workgroup_size(1)
 fn main4() {
   no_uses();
 }
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl
index cd91ab7..cb95b58 100644
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl
+++ b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl
@@ -16,13 +16,13 @@
   data2 : i32;
 };
 
-[[group(0), binding(3)]] var<storage, read_write> x_4 : result;
+@group(0) @binding(3) var<storage, read_write> x_4 : result;
 
-[[group(0), binding(0)]] var<uniform> x_6 : block0;
+@group(0) @binding(0) var<uniform> x_6 : block0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : block1;
+@group(0) @binding(1) var<uniform> x_8 : block1;
 
-[[group(0), binding(2)]] var<uniform> x_10 : block2;
+@group(0) @binding(2) var<uniform> x_10 : block2;
 
 fn main_1() {
   let x_25 : i32 = x_6.data0;
@@ -34,7 +34,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl
index 8d78d1e..0e4fce3 100644
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl
+++ b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl
@@ -2,14 +2,14 @@
   data : vec4<f32>;
 };
 
-[[group(0), binding(1)]] var<storage, read_write> x_4 : block0;
+@group(0) @binding(1) var<storage, read_write> x_4 : block0;
 
 fn main_1() {
   x_4.data = vec4<f32>(1.0, 2.0, 3.0, 4.0);
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl
index 465aac8..5cdad21 100644
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl
+++ b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl
@@ -6,7 +6,7 @@
 
 var<private> frag_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : block0;
+@group(0) @binding(1) var<uniform> x_8 : block0;
 
 var<private> gl_Position : vec4<f32>;
 
@@ -19,14 +19,14 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   frag_color_1 : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position, frag_color);
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl
index 0901c1f..eae3d41 100644
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl
+++ b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl
@@ -9,12 +9,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   final_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[location(0)]] frag_color_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(0) frag_color_param : vec4<f32>) -> main_out {
   frag_color = frag_color_param;
   main_1();
   return main_out(final_color);
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl
index b9cc524..8e480df 100644
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl
+++ b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl
@@ -13,14 +13,14 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
-  [[location(1)]]
+  @location(1)
   frag_color_1 : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position, frag_color);
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl b/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl
index cbbd626..0ad4fe9 100644
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl
+++ b/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl
@@ -16,12 +16,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[location(1)]] frag_color_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(1) frag_color_param : vec4<f32>) -> main_out {
   frag_color = frag_color_param;
   main_1();
   return main_out(color_out);
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl
index 8432d48..6d1ff1f 100644
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl
@@ -11,11 +11,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl
index 32cc07e..ae0c7b0 100644
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl
@@ -6,7 +6,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -101,11 +101,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl
index c345dfc..58049a1 100644
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl
@@ -10,7 +10,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_30 : buf0;
+@group(0) @binding(0) var<uniform> x_30 : buf0;
 
 fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
   var temp : i32;
@@ -185,11 +185,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl
index 75f4bd3..db02da6 100644
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -91,12 +91,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl
index a09f0d4..63e9675 100644
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl
@@ -102,12 +102,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl
index 19735ee..9c19516 100644
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl
@@ -83,11 +83,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl
index 5793a6f..6200ff3 100644
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<i32>;
+type RTArr = @stride(4) array<i32>;
 
 struct doesNotMatter {
   global_seed : i32;
@@ -11,9 +11,9 @@
 
 var<private> gl_LocalInvocationID : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_7 : doesNotMatter;
+@group(0) @binding(0) var<storage, read_write> x_7 : doesNotMatter;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 fn main_1() {
   var lid : i32;
@@ -55,8 +55,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(16, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] gl_LocalInvocationID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(16, 1, 1)
+fn main(@builtin(local_invocation_id) gl_LocalInvocationID_param : vec3<u32>) {
   gl_LocalInvocationID = gl_LocalInvocationID_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl
index 5ac0f1a..557b89c 100644
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var GLF_live12c5 : bool;
@@ -34,11 +34,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl
index 817d91b..04662ee 100644
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -28,11 +28,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl
index d68a5ec..f655e42 100644
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -62,11 +62,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl
index 520dccb..8af8b73 100644
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -20,11 +20,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl
index 088c0f8..1f03990 100644
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl
@@ -61,12 +61,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl
index 937a8df..4de0ebd 100644
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> GLF_live6tree : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -39,11 +39,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl
index 4affd4f..2a4df80 100644
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_25 : buf0;
+@group(0) @binding(0) var<uniform> x_25 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -304,12 +304,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl
index c7a4fe2..b4400e6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 fn func_i1_(b : ptr<function, i32>) -> f32 {
   var ndx : i32;
@@ -112,12 +112,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl
index 021c3f7..dd80eb3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 3>;
+type Arr_1 = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -54,11 +54,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl
index b046ca1..c361951 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -63,11 +63,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl
index 1fff19f..a652c56 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 fn main_1() {
   var v : vec2<i32>;
@@ -45,12 +45,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl
index 6c62828..9630567 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl
@@ -2,7 +2,7 @@
   two : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -23,11 +23,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl
index 32c79b7..a4a925f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 10>;
+type Arr = @stride(16) array<i32, 10>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -58,11 +58,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl
index d1079cb..87c4fe3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -48,11 +48,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl
index 019dd07..9a72028 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 fn main_1() {
   var f0 : f32;
@@ -77,11 +77,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl
index e8b285f..fd64516 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 3>;
+type Arr_1 = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -53,11 +53,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl
index 57cbd69..3b441f6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -46,11 +46,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl
index 8bcb3a5..be02bf8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl
@@ -22,11 +22,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl
index 3c3604a..4861cdf07 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 12>;
+type Arr = @stride(16) array<i32, 12>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
+@group(0) @binding(0) var<uniform> x_15 : buf0;
 
 fn main_1() {
   var m0 : mat3x4<f32>;
@@ -79,11 +79,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl
index 058b636..f9187ee 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,11 +44,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl
index ba3f0fe..fdeb85a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -58,12 +58,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl
index ab2be50..f7f4488 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 20>;
+type Arr = @stride(16) array<i32, 20>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -8,11 +8,11 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_19 : buf1;
+@group(0) @binding(1) var<uniform> x_19 : buf1;
 
 fn main_1() {
   var arr0 : array<i32, 10>;
@@ -219,11 +219,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl
index f95fe55..f71829a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 7>;
+type Arr = @stride(16) array<f32, 7>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -84,11 +84,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl
index 74ba82b..2ffa4ac 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -53,11 +53,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl
index fbe9843..26f7859 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -47,11 +47,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl
index 8cbbc01..383dd2b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -61,12 +61,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl
index f5e5913..5ab1ec2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -57,11 +57,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl
index 1d88159..b8d916b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl
@@ -2,23 +2,23 @@
   zero : f32;
 };
 
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(2)]] var<uniform> x_6 : buf2;
+@group(0) @binding(2) var<uniform> x_6 : buf2;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -53,11 +53,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl
index 73515b9..9b8061d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl
@@ -149,12 +149,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl
index b8f5efd..90b17bf 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 3>;
+type Arr_1 = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -137,11 +137,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl
index 3319941..e8560ca 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var f : f32;
@@ -27,11 +27,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl
index 6cc8571..82acf85 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -65,11 +65,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl
index f53bccb..a5ffc0e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 fn main_1() {
   var a : f32;
@@ -41,11 +41,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl
index 6251946..c01653c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -71,11 +71,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl
index e0b9928..bbd9843 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 fn main_1() {
   var v0 : vec2<f32>;
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl
index dc68ea44..3fc8857 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 fn main_1() {
   var v0 : vec2<f32>;
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl
index 8d15f49..4b9df77 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
@@ -8,9 +8,9 @@
   zero : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -43,11 +43,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl
index 7094098..f0c0fa1 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf2 {
   x_GLF_uniform_int_values : Arr_1;
@@ -14,7 +14,7 @@
   three : i32;
 };
 
-type Arr_2 = [[stride(16)]] array<u32, 1>;
+type Arr_2 = @stride(16) array<u32, 1>;
 
 struct buf0 {
   x_GLF_uniform_uint_values : Arr_2;
@@ -22,15 +22,15 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(2)]] var<uniform> x_12 : buf2;
+@group(0) @binding(2) var<uniform> x_12 : buf2;
 
-[[group(0), binding(3)]] var<uniform> x_14 : buf3;
+@group(0) @binding(3) var<uniform> x_14 : buf3;
 
-[[group(0), binding(0)]] var<uniform> x_16 : buf0;
+@group(0) @binding(0) var<uniform> x_16 : buf0;
 
 fn func0_() {
   var tmp : vec4<f32>;
@@ -128,12 +128,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl
index 4287868..3468018 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 5>;
+type Arr = @stride(16) array<f32, 5>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -32,12 +32,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl
index 5049fc2..181cfc2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl
@@ -2,17 +2,17 @@
   v1 : vec2<f32>;
 };
 
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 fn main_1() {
   var b : bool;
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl
index 8cc5601..0b91056 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -50,11 +50,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl
index 3860701..fc6c715 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -8,7 +8,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
@@ -16,11 +16,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(2)]] var<uniform> x_9 : buf2;
+@group(0) @binding(2) var<uniform> x_9 : buf2;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 fn main_1() {
   var a : i32;
@@ -60,11 +60,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl
index 279f432..1bf8ce0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl
@@ -2,7 +2,7 @@
   quarter : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -20,11 +20,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl
index 367bf40..e0b9f7d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl
@@ -28,11 +28,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl
index c3e6f5d..95c8f9c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -18,11 +18,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl
index 45f886f..3801059 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var f : f32;
@@ -23,11 +23,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl
index b2ed065..cbea4ee 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl
@@ -2,7 +2,7 @@
   fourtytwo : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl
index 2617e9c..348724f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl
@@ -13,11 +13,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl
index 78b9651..a0b52a6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -20,12 +20,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl
index bab28c3..c5e47de 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -68,11 +68,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl
index 919120b..fe33aad 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   if (((1.0 % 1.0) <= 0.01)) {
@@ -23,11 +23,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl
index 9bdf93e..cb84651 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -48,11 +48,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl
index 92d63c5..cf2d376 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var x_30 : bool;
@@ -40,11 +40,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl
index f14b530..5dd0328 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -30,11 +30,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl
index 2d4b641..a9f8c0d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl
index aa69903..aff4ac4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl
@@ -14,11 +14,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl
index 0fdf48f..903cd15 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -74,11 +74,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl
index 9853546..9a4d15f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -21,11 +21,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl
index 3af5bf9..9822ce0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -10,9 +10,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 fn main_1() {
   let x_28 : i32 = x_5.x_GLF_uniform_int_values[0];
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl
index 91ec687..c0a411d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl
@@ -6,7 +6,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -58,11 +58,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl
index be4b0ae..6c2ce38 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl
@@ -6,7 +6,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -30,11 +30,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl
index 1604234..9438771 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl
@@ -6,7 +6,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -65,11 +65,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl
index 56180ef..6301e66 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 1>;
+type Arr_1 = @stride(16) array<i32, 1>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   var v : vec4<f32>;
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl
index a5bfcb9..0eaf9df 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -91,11 +91,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl
index c7c18d1e..659ece3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl
@@ -65,11 +65,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl
index 645096c..6544198 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -65,11 +65,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl
index 5c74b32..ff92b48 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl
index 1a131cd..5cc135e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
 fn func_f1_(b : ptr<function, f32>) -> f32 {
   let x_90 : f32 = x_7.x_GLF_uniform_float_values[0];
@@ -78,11 +78,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl
index 06ea4a2..01e8325 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -36,11 +36,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl
index eadf964..1964f4c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,11 +44,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl
index 1a4e159..308fa1a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl
@@ -6,9 +6,9 @@
   minusEight : i32;
 };
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl
index d6f28e9..52f8b42 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -66,11 +66,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl
index 14ef8d3..76343c7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl
@@ -108,11 +108,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl
index 46da53a..cb78e4d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl
@@ -8,7 +8,7 @@
 
 var<private> array1 : array<f32, 3>;
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -72,12 +72,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl
index e1e2a9e..ddd7fa4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -16,11 +16,11 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
-[[group(0), binding(2)]] var<uniform> x_12 : buf2;
+@group(0) @binding(2) var<uniform> x_12 : buf2;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -79,11 +79,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl
index 0155704..ffdf893 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -55,11 +55,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl
index af5a1c1..cd8f3f0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl
@@ -13,11 +13,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl
index b93b128..6006a29 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -53,11 +53,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl
index 690c3dd..9237ad8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -60,11 +60,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl
index 620e1b8..e09ab73 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl
@@ -13,11 +13,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl
index 28e53df..4ca3a57 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -50,11 +50,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl
index 35a6b62..af347a5 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl
index 57dfb87..91e2f98 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl
index 76cdd76..92a2bb7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl
index a475384..4244472 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl
@@ -16,11 +16,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl
index 3d02048..7b6d3b1 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl
@@ -13,11 +13,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl
index 4fa9901..3926937 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl
@@ -27,12 +27,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl
index 56678ab..ad83063 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl
@@ -13,12 +13,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl
index 10c8137..cdfde15 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl
@@ -2,7 +2,7 @@
   minusOne : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl
index ec3893d..41c2d79 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl
@@ -13,11 +13,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl
index 9e985c7..7cb34b0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl
@@ -2,7 +2,7 @@
   one : u32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -64,11 +64,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl
index f04d8e2..45e24a8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl
@@ -13,11 +13,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl
index be6fc47..350df86 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl
@@ -16,11 +16,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl
index 6795d45..e86e68c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -33,11 +33,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl
index 485238c..865cffe 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl
index eb496299..3aeb232 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl
@@ -2,7 +2,7 @@
   twoandthree : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -34,11 +34,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl
index 017d331..5e92a1d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl
@@ -2,7 +2,7 @@
   three : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl
index c832a10..cd134b6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl
@@ -2,7 +2,7 @@
   three : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl
index 7c7b28a..1446989 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl
index eb97819..7e63c10 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -21,11 +21,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl
index 82d53fc..b9dc403 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl
@@ -2,7 +2,7 @@
   four : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -21,11 +21,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl
index 738c840..dbdf48c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -21,11 +21,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl
index 99ec59a..d7f03d8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl
@@ -34,11 +34,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl
index 44ac190..b4a3e58 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl
@@ -34,11 +34,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl
index 1bba57f..6ae5084 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl
@@ -2,7 +2,7 @@
   five : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -31,11 +31,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl
index 1315b97..fa13a35 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl
index a762a7d..115f201 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl
@@ -2,7 +2,7 @@
   four : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl
index edfae00..37d278a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -20,11 +20,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl
index 5938fe4..2397e0e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl
index bbb0ca6..16eb822 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl
index 49c9205..7049b33 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl
@@ -2,7 +2,7 @@
   threeandfour : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -23,11 +23,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl
index 13ebbb0..e857996 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl
@@ -16,11 +16,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl
index bca2411..479f215 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl
@@ -2,7 +2,7 @@
   zeroOne : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -25,11 +25,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl
index c13349f..3d3d0e4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -41,11 +41,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl
index c5585de..6a728fd 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -59,11 +59,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl
index af6ec42..b6ec115 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -54,11 +54,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl
index 05228f7..9e1b201 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 fn main_1() {
   var f0 : f32;
@@ -40,12 +40,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl
index a1ab4e0..089938b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -48,11 +48,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl
index 9d5718a..3a9c135 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -36,12 +36,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl
index 0ea6e7d..a905e60 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -85,12 +85,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl
index baa752e..ddb1417 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 1>;
+type Arr_1 = @stride(16) array<i32, 1>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 fn main_1() {
   var icoord : vec2<i32>;
@@ -62,12 +62,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl
index 0791d46..20851de 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 fn func_f1_(x : ptr<function, f32>) -> f32 {
   loop {
@@ -82,12 +82,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl
index b695c16..85ca151 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
@@ -8,21 +8,21 @@
   zero : f32;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
+@group(0) @binding(2) var<uniform> x_10 : buf2;
 
 var<private> gl_FragCoord : vec4<f32>;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 fn func_vf2_(pos : ptr<function, vec2<f32>>) -> bool {
   let x_62 : f32 = (*(pos)).x;
@@ -60,12 +60,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl
index 9c26d44..b2ded57 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -8,7 +8,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   x_GLF_global_loop_count = 0;
@@ -55,11 +55,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl
index 57432b7..caf4f3a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 18>;
+type Arr = @stride(16) array<f32, 18>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -16,11 +16,11 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
-[[group(0), binding(2)]] var<uniform> x_15 : buf2;
+@group(0) @binding(2) var<uniform> x_15 : buf2;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -130,11 +130,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl
index 19d84ed..96ce6a3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -63,11 +63,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl
index 510a02ab..3ae2436 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -68,11 +68,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl
index 231d414..531a3d4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -8,7 +8,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   x_GLF_global_loop_count = 0;
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl
index 080e3ba..c5c2c0c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -28,11 +28,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl
index fa50b1e..eae9e89 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   let x_31 : f32 = x_6.x_GLF_uniform_float_values[1];
@@ -45,12 +45,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl
index e31894b..aed3c77 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -67,11 +67,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl
index ff058e8..883acb7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -46,11 +46,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl
index e18c700..885ecab 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl
@@ -2,7 +2,7 @@
   three : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -43,11 +43,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl
index 9dc640b..d210920 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -77,11 +77,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl
index d9a10ba..f649776 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -71,11 +71,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl
index d16fa14..3d51f22 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -81,11 +81,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl
index 5f11cde..27f748f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -39,11 +39,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl
index 0bb69b8..a98a0ef 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl
index a1adef2..ba4cf88 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -87,11 +87,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl
index 5a5096d..2a3bb62 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -58,11 +58,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl
index 02f7508..02e7cd8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 4>;
+type Arr_1 = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -56,11 +56,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl
index 7d42f20..5ea2613 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl
@@ -27,12 +27,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl
index ab1fd10..badcf70 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -68,11 +68,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl
index c5a9a86..7405541 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl
@@ -38,11 +38,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl
index cf1481a..0a01338 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl
@@ -29,12 +29,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl
index 95eb9e4..6df84d8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -73,12 +73,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl
index de17bea..4b2c476 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -58,11 +58,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl
index 46580ae..95e3e82 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -74,11 +74,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl
index 10bc47e..ce4f886 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -79,12 +79,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl
index d0f8b62..6284f25 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -89,11 +89,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl
index 3e90ab3..c40e683 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -69,11 +69,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl
index 8b9be4e..5515fa1 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,11 +44,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl
index 41a1c55..9f58cd8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   let x_7 : i32 = x_5.x_GLF_uniform_int_values[0];
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl
index a691939..b69d2c2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 fn main_1() {
   let x_29 : f32 = x_5.x_GLF_uniform_float_values[0];
@@ -36,11 +36,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl
index 5e268e0..4de5b47 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_14 : buf1;
+@group(0) @binding(1) var<uniform> x_14 : buf1;
 
 fn f1_f1_(a : ptr<function, f32>) -> f32 {
   var b : i32;
@@ -66,12 +66,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl
index 4cc9cf8..d9c43db 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 fn main_1() {
   var a : i32;
@@ -46,12 +46,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl
index ed48840..a31725e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 fn main_1() {
   var i : i32;
@@ -43,11 +43,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl
index 585c193..2465cc6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 fn f1_f1_(a : ptr<function, f32>) -> f32 {
   let x_100 : f32 = *(a);
@@ -64,12 +64,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl
index 2b819ba..d84f847 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 7>;
+type Arr = @stride(16) array<f32, 7>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -85,11 +85,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl
index eae85ef..62a1158 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 fn main_1() {
   var i : i32;
@@ -59,12 +59,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl
index 628a5ec..b67d22f7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -82,11 +82,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl
index c18fcc8..6f2a0b3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 3>;
+type Arr_1 = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -84,11 +84,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl
index c423f55..d912c18 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -86,11 +86,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl
index 7b441cf6..b3b842d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -39,11 +39,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl
index 58bf348..5daa6ea 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -77,11 +77,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl
index 3591994..054e604 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl
index 2c3b18f..2ff0ddf 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl
index ebf9237..450004f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -38,11 +38,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl
index 6b0ffef..e6a5f8c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 12>;
+type Arr = @stride(16) array<i32, 12>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -165,11 +165,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl
index dbbbe2b..ad8bed6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   var a : f32;
@@ -35,11 +35,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl
index e3df98e..04e7908 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   var a : f32;
@@ -35,11 +35,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl
index 43f4562..fd3b6cd 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 fn main_1() {
   let x_31 : f32 = x_5.x_GLF_uniform_float_values[0];
@@ -33,11 +33,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl
index fb49913..9dda7ec 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl
@@ -6,15 +6,15 @@
   v1 : vec2<f32>;
 };
 
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -147,11 +147,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl
index 0590a0e..277fb3a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
+@group(0) @binding(1) var<uniform> x_5 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 fn main_1() {
   var i : i32;
@@ -50,11 +50,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl
index b584e24..c915bc3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -30,11 +30,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl
index ab9a5fd..31c63ab 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -47,12 +47,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl
index 054f760..c2cd62a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl
index a0443e6..195dfd7 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl
@@ -91,11 +91,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl
index a317457..da37a46 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -38,11 +38,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl
index cf4338c..1736a9c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl
index 6029823..0429c3b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var x_32_phi : i32;
@@ -39,11 +39,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl
index 0a12739..0d9ad36 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl
@@ -77,11 +77,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl
index c13d80f..76b7072 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -68,11 +68,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl
index 4c1cc2e..e839854 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -42,11 +42,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl
index 8f286a3..7f75d10 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -65,11 +65,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl
index 3dc9b8f..4d7396f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 6>;
+type Arr = @stride(16) array<i32, 6>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -79,11 +79,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl
index 4f881f0..da7adbc 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -71,11 +71,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl
index d17d686..043f22e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -81,12 +81,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl
index 6bee0d7..c2a9270 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -53,11 +53,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl
index 61e176c..4fb7bb4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -38,11 +38,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl
index fbaf576..749e41d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -33,11 +33,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl
index 5d36dbd..95223c0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -62,11 +62,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl
index 3edff4c..5603562 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -81,11 +81,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl
index b2a62e1..1afd0fb 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 6>;
+type Arr = @stride(16) array<i32, 6>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
 fn main_1() {
   var data : array<i32, 5>;
@@ -119,12 +119,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl
index f9b028df..e4181c5 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
 var<private> x_GLF_v1 : vec4<f32>;
 
@@ -81,12 +81,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_v1_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_v1);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl
index 633587b..92c33ac 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -40,11 +40,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl
index 97d05ee..595d15c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -61,12 +61,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl
index bacb0e9..6063cf2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -85,11 +85,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl
index 745d306..80a5f2f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -32,11 +32,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl
index 7556722..3000605 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl
index 6847d17..0b552c2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -19,11 +19,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl
index 4168f03..7c8e12d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -8,7 +8,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 fn main_1() {
   var a : i32;
@@ -29,12 +29,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl
index 7987ab9..beb04a2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl
@@ -8,7 +8,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -86,11 +86,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl
index 9c1a3af..dcf3f7d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl
@@ -2,7 +2,7 @@
   two : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -32,11 +32,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl
index a30ca1f..3860032 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl
@@ -2,7 +2,7 @@
   three : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -50,11 +50,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl
index 194355f..75ef009 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 fn main_1() {
   var f : f32;
@@ -37,12 +37,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl
index 6c6f442..c91bc5b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl
@@ -12,12 +12,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl
index 0eacd57..970ec3a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : u32;
 };
 
-type Arr = [[stride(16)]] array<i32, 1>;
+type Arr = @stride(16) array<i32, 1>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -10,11 +10,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 fn func_() -> f32 {
   switch(1) {
@@ -51,12 +51,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl
index ee397ee..4e092af 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var a : f32;
@@ -26,11 +26,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl
index 45050a1..8dc1059 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl
@@ -1,28 +1,28 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf2 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-type Arr_2 = [[stride(16)]] array<u32, 1>;
+type Arr_2 = @stride(16) array<u32, 1>;
 
 struct buf1 {
   x_GLF_uniform_uint_values : Arr_2;
 };
 
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
+@group(0) @binding(2) var<uniform> x_8 : buf2;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_12 : buf1;
+@group(0) @binding(1) var<uniform> x_12 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -56,12 +56,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl
index 6dbe667..c840fa9 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl
@@ -648,11 +648,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl
index 85ab856..c5a7eec 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl
@@ -2,13 +2,13 @@
   one : f32;
 };
 
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -16,13 +16,13 @@
 
 var<private> m : mat4x2<f32>;
 
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
+@group(0) @binding(2) var<uniform> x_10 : buf2;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_16 : buf1;
+@group(0) @binding(1) var<uniform> x_16 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -118,12 +118,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl
index 888c7e3..fa8927b 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -88,11 +88,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl
index 6961cb2..bc23f2a 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_global_loop_count : i32;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -319,11 +319,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl
index 3542b4b..45c6006 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 19>;
+type Arr = @stride(16) array<i32, 19>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -116,11 +116,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl
index 014de3f..07176d9 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -63,11 +63,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl
index 8033cb9..ab44f55 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,9 +12,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   var a : f32;
@@ -63,11 +63,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl
index c83f471..ebcbd97 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 5>;
+type Arr = @stride(16) array<f32, 5>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -64,11 +64,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl
index 045939d..503dd1c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -31,11 +31,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl
index 40c7d3e..892a12c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -94,12 +94,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl
index 07eb0ab..9439fb8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -219,12 +219,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl
index 25ac138..7ea4c74 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -91,11 +91,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl
index 967e25d..fbcbd37 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl
index 23deeb0..a562dab 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl
@@ -2,7 +2,7 @@
   three : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl
index 9526fa4..d437610 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 fn main_1() {
   var i : i32;
@@ -71,12 +71,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl
index 45a9af8..21a1811 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
@@ -8,17 +8,17 @@
   one : f32;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(2)]] var<uniform> x_11 : buf2;
+@group(0) @binding(2) var<uniform> x_11 : buf2;
 
-[[group(0), binding(1)]] var<uniform> x_13 : buf1;
+@group(0) @binding(1) var<uniform> x_13 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -57,11 +57,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl
index ed5b89a..76a7c6f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
@@ -8,17 +8,17 @@
   zero : i32;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
+@group(0) @binding(2) var<uniform> x_8 : buf2;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -54,11 +54,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl
index 7418f6e..a213691 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 fn main_1() {
   var a : f32;
@@ -35,11 +35,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl
index c40a4c6..3dc8f01 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl
index 04d4193..04e7a73 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl
index dad9c78..c72ff22 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var x_9 : array<i32, 1>;
@@ -32,11 +32,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl
index 9d61014..af3e4e9 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl
@@ -7,7 +7,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -57,11 +57,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl
index 8e1fa65..41448e1 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -70,12 +70,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_v1_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_v1);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl
index 149bcab..de85f78 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -75,11 +75,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl
index 708e046..8fcba9c 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl
@@ -6,7 +6,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
+@group(0) @binding(0) var<uniform> x_11 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -77,11 +77,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl
index d902f3f..25b4aee 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf1;
+@group(0) @binding(0) var<uniform> x_5 : buf1;
 
 fn main_1() {
   let x_22 : i32 = x_5.x_GLF_uniform_int_values[0];
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl
index 5fbcdd9..8d05b1d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
@@ -16,13 +16,13 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
-[[group(0), binding(2)]] var<uniform> x_11 : buf2;
+@group(0) @binding(2) var<uniform> x_11 : buf2;
 
 fn main_1() {
   var i : i32;
@@ -58,12 +58,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl
index 4f29ab6..d1c4406 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 fn func_() -> vec2<f32> {
   var v : vec2<f32>;
@@ -50,11 +50,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl
index 97c49ab..5e613ad 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 7>;
+type Arr = @stride(16) array<i32, 7>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 3>;
+type Arr_1 = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -218,11 +218,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl
index 3e5c910..5dac995 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -179,11 +179,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl
index 2794ec5..7428919 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 5>;
+type Arr = @stride(16) array<f32, 5>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,11 +44,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl
index d74e3c2..b903685 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var v : vec4<f32>;
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl
index b2a778b..5229944 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -48,11 +48,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl
index 27faee3..776fce0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl
@@ -2,17 +2,17 @@
   v1 : vec2<f32>;
 };
 
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
+@group(0) @binding(1) var<uniform> x_5 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 fn main_1() {
   let x_29 : f32 = x_5.v1.x;
@@ -40,11 +40,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl
index b48fce6..530c5ac 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var x_29 : bool;
@@ -28,11 +28,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl
index 8b99a56..a683057 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 6>;
+type Arr = @stride(16) array<i32, 6>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -101,11 +101,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl
index 75a7f4c..133ac57 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -69,12 +69,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl
index 30873ed..58cee81 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl
@@ -6,7 +6,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -77,11 +77,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl
index 47c21ce..f0082cf 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl
@@ -8,9 +8,9 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 fn main_1() {
   var i : i32;
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl
index 3fd60e5..0cf0b49 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl
@@ -2,7 +2,7 @@
   sequence : vec4<i32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl
index 4480579..8100eda 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -30,11 +30,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl
index 36eceec..a9510ff 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl
@@ -2,7 +2,7 @@
   two : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -38,11 +38,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl
index 99296b4..0d58bc3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl
@@ -2,7 +2,7 @@
   two : u32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -20,11 +20,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl
index 98b5b4c..b58a8b9 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -49,11 +49,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl
index 66ce6c9..7c308e3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl
@@ -2,7 +2,7 @@
   three : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -20,11 +20,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl
index 2336efa..a92ccaf 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -86,11 +86,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl
index 2ac7c5e..b5acf65 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 1>;
+type Arr_1 = @stride(16) array<i32, 1>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   var a : f32;
@@ -36,11 +36,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl
index a54df57..65a65c4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl
index 8395edad..cd777be 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl
@@ -2,7 +2,7 @@
   three : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -29,12 +29,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl
index 318f16a..68db28f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -25,11 +25,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl
index a903014..6b82628 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -26,11 +26,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl
index 2b24d07..648957e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,12 +44,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl
index a3418a9..853116d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -76,11 +76,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl
index 2e51071..99d7851 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> g : i32;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -45,11 +45,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl
index 0814ab2..9875dc8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 4>;
+type Arr = @stride(16) array<f32, 4>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -58,11 +58,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl
index cc2ab67..878b143 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl
index a52a30a..71aaee0 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl
@@ -15,11 +15,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl
index ba81461..5656cd6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl
@@ -2,7 +2,7 @@
   numbers : array<f32, 3>;
 };
 
-type Arr = [[stride(16)]] array<f32, 5>;
+type Arr = @stride(16) array<f32, 5>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
@@ -16,19 +16,19 @@
   oneVec : vec2<f32>;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_9 : buf2;
+@group(0) @binding(2) var<uniform> x_9 : buf2;
 
-[[group(0), binding(3)]] var<uniform> x_12 : buf3;
+@group(0) @binding(3) var<uniform> x_12 : buf3;
 
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
+@group(0) @binding(0) var<uniform> x_15 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -78,11 +78,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl
index 5174f36..be7e4b8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
@@ -8,19 +8,19 @@
   resolution : vec2<f32>;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
+@group(0) @binding(2) var<uniform> x_8 : buf2;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 fn main_1() {
   var f : f32;
@@ -47,11 +47,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl
index 0397e5b..47f7183 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -91,11 +91,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl
index 210236b..a95343e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
@@ -8,7 +8,7 @@
   zero : f32;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -16,11 +16,11 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
+@group(0) @binding(1) var<uniform> x_5 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_7 : buf2;
+@group(0) @binding(2) var<uniform> x_7 : buf2;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 fn main_1() {
   var i : i32;
@@ -84,11 +84,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl
index c1757e6..496f779 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -27,12 +27,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl
index 0ee891d..0f1c0bb 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl
@@ -6,15 +6,15 @@
   v1 : vec2<f32>;
 };
 
-type Arr = [[stride(16)]] array<i32, 5>;
+type Arr = @stride(16) array<i32, 5>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -153,11 +153,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl
index 891a913..49874e8 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl
@@ -18,11 +18,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl
index d2a1597..a0ae7b1 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
@@ -12,11 +12,11 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
+@group(0) @binding(1) var<uniform> x_7 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 fn main_1() {
   var f : f32;
@@ -40,12 +40,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl
index cb2e891..7e44271 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var x_24 : vec4<f32>;
@@ -19,11 +19,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl
index 97b93bc..f73e0ea 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl
@@ -1,4 +1,4 @@
-type Arr = [[stride(16)]] array<f32, 1>;
+type Arr = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr;
@@ -8,9 +8,9 @@
   v1 : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -46,11 +46,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl
index 8691174..a2cb24f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl
@@ -2,13 +2,13 @@
   data : i32;
 };
 
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -85,11 +85,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl
index ce444a3..2255ea4 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl
@@ -1,26 +1,26 @@
-type Arr = [[stride(16)]] array<u32, 1>;
+type Arr = @stride(16) array<u32, 1>;
 
 struct buf0 {
   x_GLF_uniform_uint_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 2>;
+type Arr_1 = @stride(16) array<i32, 2>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-type Arr_2 = [[stride(16)]] array<f32, 3>;
+type Arr_2 = @stride(16) array<f32, 3>;
 
 struct buf2 {
   x_GLF_uniform_float_values : Arr_2;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
+@group(0) @binding(2) var<uniform> x_10 : buf2;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl
index b2e8650..eb55b50 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -84,11 +84,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl
index f99a3bc..a353c90 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf1 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf0 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -83,11 +83,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl
index 4aa9d43..f74488d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -31,11 +31,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl
index 00262c5..b301222 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 3>;
+type Arr = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl
index 4c3b34b..18e91bc 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl
index 36afb2f..d5df523 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 fn main_1() {
   var a : i32;
@@ -35,11 +35,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl
index c80f332..5cd4d7e 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 4>;
+type Arr = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -55,11 +55,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl
index 240d9d9..d54fa3d 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl
@@ -1,28 +1,28 @@
-type Arr = [[stride(16)]] array<u32, 1>;
+type Arr = @stride(16) array<u32, 1>;
 
 struct buf2 {
   x_GLF_uniform_uint_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-type Arr_2 = [[stride(16)]] array<i32, 2>;
+type Arr_2 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_2;
 };
 
-[[group(0), binding(2)]] var<uniform> x_6 : buf2;
+@group(0) @binding(2) var<uniform> x_6 : buf2;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 fn main_1() {
   var f : f32;
@@ -45,11 +45,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl
index 2c1e642..6e1e0ba 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl
@@ -1,10 +1,10 @@
-type Arr = [[stride(16)]] array<i32, 16>;
+type Arr = @stride(16) array<i32, 16>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -149,11 +149,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl
index da47422..22314e6 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl
@@ -2,7 +2,7 @@
   quarter : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl
index 941df15..50fc802 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -27,11 +27,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl
index 5be7339..d431a77 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl
@@ -18,11 +18,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl
index 2cecb75..d7062ee 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl
@@ -14,11 +14,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl
index c5a9449..85f68d3 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 2>;
+type Arr = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 3>;
+type Arr_1 = @stride(16) array<i32, 3>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -55,11 +55,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl
index 9a7681c..007b027 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl
@@ -1,20 +1,20 @@
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 2>;
+type Arr_1 = @stride(16) array<f32, 2>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
+@group(0) @binding(1) var<uniform> x_8 : buf1;
 
 fn main_1() {
   var v1 : vec2<f32>;
@@ -50,11 +50,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl
index f3f84a4..549b310 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl
@@ -1,28 +1,28 @@
-type Arr = [[stride(16)]] array<u32, 2>;
+type Arr = @stride(16) array<u32, 2>;
 
 struct buf1 {
   x_GLF_uniform_uint_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<f32, 1>;
+type Arr_1 = @stride(16) array<f32, 1>;
 
 struct buf2 {
   x_GLF_uniform_float_values : Arr_1;
 };
 
-type Arr_2 = [[stride(16)]] array<i32, 2>;
+type Arr_2 = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_2;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
+@group(0) @binding(2) var<uniform> x_8 : buf2;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
+@group(0) @binding(0) var<uniform> x_12 : buf0;
 
 fn main_1() {
   var a : u32;
@@ -51,11 +51,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl
index 814eae3..854255f 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(16)]] array<f32, 3>;
+type Arr = @stride(16) array<f32, 3>;
 
 struct buf1 {
   x_GLF_uniform_float_values : Arr;
 };
 
-type Arr_1 = [[stride(16)]] array<i32, 4>;
+type Arr_1 = @stride(16) array<i32, 4>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr_1;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -103,11 +103,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl
index 8551242..4440fe2 100644
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl
@@ -4,13 +4,13 @@
   c : i32;
 };
 
-type Arr = [[stride(16)]] array<i32, 2>;
+type Arr = @stride(16) array<i32, 2>;
 
 struct buf0 {
   x_GLF_uniform_int_values : Arr;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl
index d154e28..54c80fc 100644
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -87,12 +87,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl
index 765114d..6f1e3d1 100644
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl
@@ -6,9 +6,9 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> x_4 : theSSBO;
+@group(0) @binding(0) var<storage, read_write> x_4 : theSSBO;
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
 fn main_1() {
   var i : i32;
@@ -101,7 +101,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl
index c416382..8a5dbfb 100644
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -65,11 +65,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl
index 549895b..0be3eee 100644
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,12 +44,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl
index 6981641..d043efa 100644
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl
@@ -32,12 +32,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl
index 8ff5ce8..724ac94 100644
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -39,12 +39,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl
index 83948ce..12ab32e 100644
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl
@@ -50,12 +50,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl
index 926c273..8d86b693 100644
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl
@@ -33,12 +33,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl
index c2fa551..e826d0a 100644
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl
@@ -43,11 +43,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl
index 45e2a65..9784c8bd 100644
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -64,11 +64,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl
index 2c077a3f..60ed7c9 100644
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl
@@ -24,12 +24,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl
index 82a7bae..1267e46 100644
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl
@@ -2,7 +2,7 @@
   out_data : i32;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> x_4 : theSSBO;
+@group(0) @binding(0) var<storage, read_write> x_4 : theSSBO;
 
 fn main_1() {
   var x_30 : mat2x2<f32>;
@@ -37,7 +37,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl
index c02f2ce..b468753 100644
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -73,12 +73,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl
index 3817d55..bf208d3 100644
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl
@@ -31,11 +31,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(color);
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl
index 1478c3b..f8bd3f3 100644
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl
@@ -17,11 +17,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl
index 869d8a9..0eff67b 100644
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl
@@ -31,12 +31,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl
index 64ef616..1eefb0f 100644
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -77,12 +77,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl
index 2fffb92..2285d25 100644
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -50,12 +50,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl
index 999c03a..b57810b 100644
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl
@@ -2,7 +2,7 @@
   one : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -139,11 +139,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl
index 7948d49..58d409d 100644
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl
index 944e589..751210a 100644
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -261,12 +261,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl
index 8d4edc0..b98eed5 100644
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -100,11 +100,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl
index 132e8f0..10bf29a 100644
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl
@@ -34,12 +34,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl
index 2002e51..c8a6e22 100644
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -73,11 +73,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl
index b8234b5..f4302e5 100644
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl
index eb27e35..14c39b0 100644
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl
@@ -6,7 +6,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -80,11 +80,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl
index ee6e11e..b582c1b 100644
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl
@@ -25,12 +25,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl
index 03312ac..235bcc2 100644
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> gv : vec4<f32>;
 
@@ -28,11 +28,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl
index 99c613e..7dbb3e0 100644
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl
@@ -11,11 +11,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl
index a1058d6..599f7fb 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -61,12 +61,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl
index f37535c..e5ed27a 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl
@@ -31,12 +31,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl
index 515f38a..ae18c57 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var i : i32;
@@ -34,11 +34,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl
index 1921a1c..0f6d9e5 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -109,11 +109,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl
index ac98e18..a1432ca 100644
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -36,12 +36,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl
index 3a6e54e..428f9a3 100644
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var x_10 : array<i32, 1>;
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl
index c9c712e..610bced 100644
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -43,12 +43,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl
index 8e2cc4c..f16375f 100644
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl
@@ -49,11 +49,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl
index def4326..3be5acb 100644
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl
@@ -63,11 +63,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl
index dc15751..39c139e 100644
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -101,11 +101,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl
index ff67040..96f0064 100644
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl
@@ -6,7 +6,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   loop {
@@ -89,12 +89,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl
index 6af14a0..077959b 100644
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gv : f32;
 
@@ -66,12 +66,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl
index 3f8d86d..23403a2 100644
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl
@@ -21,11 +21,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl
index df653e8..f45ccdd 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> map : array<i32, 256>;
 
@@ -335,12 +335,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl
index 532521f..fd017fb 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -184,12 +184,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl
index ec923c0..8ab78ee 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -189,12 +189,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl
index 2081172..bbc0147 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -43,12 +43,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl
index f104dd3..eace056 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,12 +44,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl
index 57ef309..e9cce2e 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -81,12 +81,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl
index 57c0006..0ee298a 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -86,12 +86,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl
index 8400b67..b09ced5 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> map : array<i32, 256>;
 
@@ -344,12 +344,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl
index 4d73d20..3d8680e 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
+@group(0) @binding(0) var<uniform> x_20 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -100,12 +100,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl
index 1d54a26..1deee30 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
+@group(0) @binding(0) var<uniform> x_20 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -101,12 +101,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl
index e41e03c..12607ba 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl
@@ -10,13 +10,13 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
+@group(0) @binding(1) var<uniform> x_32 : buf1;
 
 fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
   var k : i32;
@@ -299,12 +299,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl
index 39cf669..2e55508 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl
@@ -10,13 +10,13 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
+@group(0) @binding(1) var<uniform> x_32 : buf1;
 
 fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
   var k : i32;
@@ -303,12 +303,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl
index 7899f1b..2a098b03 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl
@@ -8,9 +8,9 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -106,12 +106,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl
index 6d8202a..78974c6 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl
@@ -8,9 +8,9 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -106,12 +106,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl
index 03f5d4a..c38f746 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl
@@ -10,13 +10,13 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
+@group(0) @binding(1) var<uniform> x_32 : buf1;
 
 fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
   var k : i32;
@@ -303,12 +303,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl
index 0c19b19..333d424 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl
@@ -644,11 +644,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl
index 62fb33d..f8056fa 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -84,12 +84,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl
index 913b37e..016470f 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -47,12 +47,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl
index 8954930..310e34e 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -44,12 +44,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl
index 6ee1e3f..e666f6f 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl
@@ -8,9 +8,9 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -126,12 +126,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl
index ce2fc53..9564b95 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl
@@ -8,9 +8,9 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
+@group(0) @binding(1) var<uniform> x_9 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -183,12 +183,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl
index 502e8b7..dba5558 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -50,12 +50,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl
index 0f6f3db..188c3b9 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -57,12 +57,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl
index 3626dd3..a57be40 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -184,12 +184,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl
index a2c109a..f652923 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> map : array<i32, 256>;
 
@@ -379,12 +379,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl
index 1012c1f..26ad9ba 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> map : array<i32, 256>;
 
@@ -341,12 +341,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl
index 633a6d5..322b118 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -328,12 +328,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl
index bafcb6da..b480a86 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -325,12 +325,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl
index 5b0e2fe..066c0ac 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -293,12 +293,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl
index 2f33bdb..a61c509 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -308,12 +308,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl
index f9628e7..c1fb481 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -401,12 +401,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl
index 1007714..4b36bd5 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -400,12 +400,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl
index c2695fb..8c64b73 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -291,12 +291,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl
index 90086b8..ac0f111 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -288,12 +288,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl
index 6c17b27..66ff6af 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -92,12 +92,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl
index 6821821..7f55dec 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -95,12 +95,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl
index 6afaa07..49dd9ad 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -92,12 +92,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl
index 12209a3..a7bed31 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -96,12 +96,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl
index a28de2c..4f2ceb5 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -93,12 +93,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl
index af34df2..67a46a0 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -93,12 +93,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl
index fdca5df..6bceeee 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -86,12 +86,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl
index de4a473..ddb4094 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -71,12 +71,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl
index 8ec24b1..9300937 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -77,12 +77,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl
index bb41ccf..339dc23 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl
@@ -10,7 +10,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_32 : buf0;
+@group(0) @binding(0) var<uniform> x_32 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -243,12 +243,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl
index 843a743..e30253e 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl
@@ -10,7 +10,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_32 : buf0;
+@group(0) @binding(0) var<uniform> x_32 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -243,12 +243,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl
index 9c26329..45b69b1 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -90,12 +90,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl
index 2f0c558..31783ae 100644
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -87,12 +87,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl
index 76d569e..fb898a5 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl
@@ -642,11 +642,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl
index dcb31b3..5e42687 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl
@@ -8,7 +8,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -964,12 +964,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl
index 0016d4c..fa23bb3 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl
@@ -253,11 +253,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl
index 4d268f6..a546ac5 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl
@@ -265,12 +265,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl
index 1f17892..571ad7a 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl
@@ -10,7 +10,7 @@
 
 var<private> tree_1 : array<BST, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_16 : buf0;
+@group(0) @binding(0) var<uniform> x_16 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -281,11 +281,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl
index 19d6c9d..495c99b 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl
@@ -253,11 +253,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl
index 80872f4..3831d37 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl
@@ -16,7 +16,7 @@
 
 var<private> tree : array<BST, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_50 : buf0;
+@group(0) @binding(0) var<uniform> x_50 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -307,11 +307,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl
index e1656b7..1eb7ba1 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -55,12 +55,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl
index eaaaea2..9c0e908 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl
@@ -6,9 +6,9 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
+@group(0) @binding(1) var<uniform> x_6 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -205,12 +205,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl
index b30f116..c51aa77 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -103,12 +103,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl
index 7520419..c089d3b 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl
@@ -6,13 +6,13 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_20 : buf1;
+@group(0) @binding(1) var<uniform> x_20 : buf1;
 
 fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
   var result : f32;
@@ -119,12 +119,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl
index 848cfcd..f0d8b20 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -106,12 +106,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl
index 046ec18..c1ee8ba 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl
@@ -6,11 +6,11 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_16 : buf1;
+@group(0) @binding(1) var<uniform> x_16 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -120,12 +120,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl
index f3cb6eb..c97f756 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl
@@ -6,11 +6,11 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_19 : buf1;
+@group(0) @binding(1) var<uniform> x_19 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -135,12 +135,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl
index 3bafe44..ebbb314 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
+@group(0) @binding(0) var<uniform> x_13 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -108,12 +108,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl
index eca86f4..5fd4664 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl
@@ -8,7 +8,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
+@group(0) @binding(0) var<uniform> x_34 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -327,12 +327,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl
index 30d100d..f58028b 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -331,12 +331,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl
index 13e6965..b471144 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl
@@ -6,7 +6,7 @@
 
 var<private> temp : array<i32, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
+@group(0) @binding(0) var<uniform> x_28 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -303,12 +303,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl
index a800ba9..d6dc1aea 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl
@@ -10,7 +10,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
+@group(0) @binding(0) var<uniform> x_34 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -267,12 +267,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl
index c3d31af..cf9871e 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl
@@ -12,7 +12,7 @@
 
 var<private> x_GLF_pos : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
+@group(0) @binding(0) var<uniform> x_34 : buf0;
 
 var<private> frag_color : vec4<f32>;
 
@@ -249,14 +249,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_GLF_pos_param : vec4<f32>) -> main_out {
   x_GLF_pos = x_GLF_pos_param;
   main_1();
   return main_out(frag_color, gl_Position);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl
index b7d3ed1..99980d9 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl
@@ -9,12 +9,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[location(0)]] frag_color_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(0) frag_color_param : vec4<f32>) -> main_out {
   frag_color = frag_color_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl
index 7a24166..71d617e 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl
@@ -16,9 +16,9 @@
 
 var<private> x_GLF_pos : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_33 : buf0;
+@group(0) @binding(0) var<uniform> x_33 : buf0;
 
-[[group(0), binding(1)]] var<uniform> x_36 : buf1;
+@group(0) @binding(1) var<uniform> x_36 : buf1;
 
 var<private> frag_color : vec4<f32>;
 
@@ -260,14 +260,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_GLF_pos_param : vec4<f32>) -> main_out {
   x_GLF_pos = x_GLF_pos_param;
   main_1();
   return main_out(frag_color, gl_Position);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl
index a6b6c61..877d1cb 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl
@@ -12,7 +12,7 @@
 
 var<private> x_GLF_pos : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
+@group(0) @binding(0) var<uniform> x_34 : buf0;
 
 var<private> frag_color : vec4<f32>;
 
@@ -247,14 +247,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_GLF_pos_param : vec4<f32>) -> main_out {
   x_GLF_pos = x_GLF_pos_param;
   main_1();
   return main_out(frag_color, gl_Position);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl
index 89fc186..ad578ea 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl
@@ -12,7 +12,7 @@
 
 var<private> x_GLF_pos : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
+@group(0) @binding(0) var<uniform> x_34 : buf0;
 
 var<private> frag_color : vec4<f32>;
 
@@ -253,14 +253,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_GLF_pos_param : vec4<f32>) -> main_out {
   x_GLF_pos = x_GLF_pos_param;
   main_1();
   return main_out(frag_color, gl_Position);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl
index 8f8de06..fe18daa 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl
@@ -16,9 +16,9 @@
 
 var<private> x_GLF_pos : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_34 : buf1;
+@group(0) @binding(1) var<uniform> x_34 : buf1;
 
-[[group(0), binding(0)]] var<uniform> x_37 : buf0;
+@group(0) @binding(0) var<uniform> x_37 : buf0;
 
 var<private> frag_color : vec4<f32>;
 
@@ -258,14 +258,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_GLF_pos_param : vec4<f32>) -> main_out {
   x_GLF_pos = x_GLF_pos_param;
   main_1();
   return main_out(frag_color, gl_Position);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl
index 518cf6b..448c4ce 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
+@group(0) @binding(0) var<uniform> x_20 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -113,12 +113,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl
index 697b608..c2deab3 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
+@group(0) @binding(0) var<uniform> x_24 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -130,12 +130,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl
index 357f622..6aa6b53 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
+@group(0) @binding(0) var<uniform> x_24 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -121,12 +121,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl
index 048a25e..2c60f19 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl
@@ -2,7 +2,7 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
+@group(0) @binding(0) var<uniform> x_15 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -150,12 +150,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl
index 12eb944..1f81ee1 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
+@group(0) @binding(0) var<uniform> x_24 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -121,12 +121,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl
index 6b3a7b0..7ba773c 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_17 : buf0;
+@group(0) @binding(0) var<uniform> x_17 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -115,12 +115,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl
index acb40bf..a3eecf8 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl
@@ -6,13 +6,13 @@
   resolution : vec2<f32>;
 };
 
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
+@group(0) @binding(1) var<uniform> x_11 : buf1;
 
 var<private> x_GLF_color : vec4<f32>;
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_19 : buf0;
+@group(0) @binding(0) var<uniform> x_19 : buf0;
 
 fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
   var x_78 : f32;
@@ -159,12 +159,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl
index f28293a..5540bb1 100644
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl
@@ -10,7 +10,7 @@
 
 var<private> struct_array : array<struct_base, 3>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -39,11 +39,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl
index a46cd46..646af01 100644
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl
@@ -7,7 +7,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -40,11 +40,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl
index 0ea59c0..703abb7 100644
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl
@@ -8,7 +8,7 @@
 
 var<private> x_3 : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : S;
+@group(0) @binding(0) var<uniform> x_5 : S;
 
 fn main_1() {
   let x_20 : vec4<f32> = x_5.field0;
@@ -20,11 +20,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_3_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_3);
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl
index 1fe3437..148481e 100644
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -24,11 +24,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl
index 027c6a7..121453e 100644
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl
@@ -2,7 +2,7 @@
   zero : f32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -43,11 +43,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl
index a458da5..893499c 100644
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -62,11 +62,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl
index cdab78b..95517da 100644
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl
@@ -14,11 +14,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl
index 7c355bb..718f257 100644
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -62,11 +62,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl
index cf0d932..6199c0e 100644
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl
@@ -29,12 +29,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl
index d9ba1c9..f5a69b7 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl
@@ -6,7 +6,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 fn main_1() {
   var odd_index : i32;
@@ -97,12 +97,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl
index 73c71d0..3588452 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct doesNotMatter {
   x_compute_data : RTArr;
@@ -10,9 +10,9 @@
 
 var<private> GLF_live2gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(1)]] var<uniform> x_9 : buf0;
+@group(0) @binding(1) var<uniform> x_9 : buf0;
 
-[[group(0), binding(0)]] var<storage, read_write> x_12 : doesNotMatter;
+@group(0) @binding(0) var<storage, read_write> x_12 : doesNotMatter;
 
 fn main_1() {
   var GLF_live2_looplimiter1 : i32;
@@ -91,7 +91,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 18, 6)]]
+@stage(compute) @workgroup_size(1, 18, 6)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl
index 3177b79..e307b1e 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl
@@ -2,7 +2,7 @@
   matrix_a_uni : mat4x4<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
+@group(0) @binding(0) var<uniform> x_8 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -57,11 +57,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl
index 027fc0f..c2ae08c 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl
@@ -7,7 +7,7 @@
   bbbb : vec4<bool>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -67,11 +67,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl
index a5541a2..6fd343d 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl
@@ -56,11 +56,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl
index b68fb06..fff1f46 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -80,12 +80,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl
index 21c6a7b..e38b6c6 100644
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl
@@ -1,10 +1,10 @@
-type RTArr = [[stride(4)]] array<f32>;
+type RTArr = @stride(4) array<f32>;
 
 struct doesNotMatter {
   x_compute_data : RTArr;
 };
 
-[[group(0), binding(0)]] var<storage, read_write> x_9 : doesNotMatter;
+@group(0) @binding(0) var<storage, read_write> x_9 : doesNotMatter;
 
 fn nb_mod_() -> f32 {
   var s : f32;
@@ -55,7 +55,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl
index 2124377..4ac1a23 100644
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var GLF_dead6index : i32;
@@ -30,11 +30,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl
index b6321d8..e684e37 100644
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn performPartition_() -> i32 {
   var GLF_live0i : i32;
@@ -60,11 +60,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl
index dd73656..91df442 100644
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -32,11 +32,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl
index 3b84978..fbd4862 100644
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl
@@ -22,12 +22,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl
index aed1aee..5df2899 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl
@@ -6,7 +6,7 @@
   resolution : vec2<f32>;
 };
 
-type RTArr = [[stride(4)]] array<i32>;
+type RTArr = @stride(4) array<i32>;
 
 struct doesNotMatter {
   x_compute_data : RTArr;
@@ -14,11 +14,11 @@
 
 var<private> gl_GlobalInvocationID : vec3<u32>;
 
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
+@group(0) @binding(1) var<uniform> x_10 : buf1;
 
-[[group(0), binding(2)]] var<uniform> x_13 : buf2;
+@group(0) @binding(2) var<uniform> x_13 : buf2;
 
-[[group(0), binding(0)]] var<storage, read_write> x_15 : doesNotMatter;
+@group(0) @binding(0) var<storage, read_write> x_15 : doesNotMatter;
 
 fn main_1() {
   var A : array<f32, 1>;
@@ -135,8 +135,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) gl_GlobalInvocationID_param : vec3<u32>) {
   gl_GlobalInvocationID = gl_GlobalInvocationID_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl
index a7740fe..f448ed4 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 fn computeColor_() -> vec3<f32> {
   var x_injected_loop_counter : i32;
@@ -32,11 +32,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl
index 54af3d3..d4b87d8 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
+@group(0) @binding(0) var<uniform> x_7 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -35,12 +35,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl
index 473428a..6c95054 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl
@@ -52,11 +52,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl
index e6da47e..2fc3c26 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
+@group(0) @binding(0) var<uniform> x_5 : buf0;
 
 fn main_1() {
   var m : i32;
@@ -34,11 +34,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl
index 005fa19..4fbd06f 100644
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl
@@ -38,11 +38,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl
index bd4cfad..2606dcd 100644
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl
@@ -37,11 +37,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl
index 3761ab1..e5dac5c 100644
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> gl_FragCoord : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
+@group(0) @binding(0) var<uniform> x_10 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -99,12 +99,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl
index 3461a66..83ac163 100644
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl
@@ -29,11 +29,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl
index 9770d45..1cb22a3 100644
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_GLF_color : vec4<f32>;
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 fn main_1() {
   var j : i32;
@@ -35,11 +35,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl
index ad7b1a1..1aded6e 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl
@@ -2,7 +2,7 @@
   injected : i32;
 };
 
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
+@group(0) @binding(0) var<uniform> x_9 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -94,11 +94,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl
index 086a895..b0aa989 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl
@@ -15,7 +15,7 @@
 
 var<private> tree_1 : array<BST, 10>;
 
-[[group(0), binding(0)]] var<uniform> x_27 : buf0;
+@group(0) @binding(0) var<uniform> x_27 : buf0;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -407,12 +407,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl
index dd18573..dbb226a 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl
@@ -87,11 +87,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl
index aabebad..acfcdf2 100644
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl
+++ b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl
@@ -2,7 +2,7 @@
   injectionSwitch : vec2<f32>;
 };
 
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
+@group(0) @binding(0) var<uniform> x_6 : buf0;
 
 var<private> x_GLF_color : vec4<f32>;
 
@@ -19,11 +19,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_GLF_color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(x_GLF_color);
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl
index ef817f7..6b386e9 100644
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl
+++ b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(4)]] array<i32, 8>;
+type Arr = @stride(4) array<i32, 8>;
 
 struct In2 {
   data_in2 : Arr;
 };
 
-type Arr_1 = [[stride(4)]] array<i32, 1024>;
+type Arr_1 = @stride(4) array<i32, 1024>;
 
 struct Out0 {
   data_out0 : Arr_1;
 };
 
-type Arr_2 = [[stride(4)]] array<i32, 512>;
+type Arr_2 = @stride(4) array<i32, 512>;
 
-type Arr_3 = [[stride(4)]] array<i32, 512>;
+type Arr_3 = @stride(4) array<i32, 512>;
 
 struct In1 {
   data_in1 : Arr_3;
@@ -24,13 +24,13 @@
 
 var<private> gl_WorkGroupID : vec3<u32>;
 
-[[group(0), binding(2)]] var<storage, read> x_13 : In2;
+@group(0) @binding(2) var<storage, read> x_13 : In2;
 
-[[group(0), binding(3)]] var<storage, read_write> x_15 : Out0;
+@group(0) @binding(3) var<storage, read_write> x_15 : Out0;
 
-[[group(0), binding(1)]] var<storage, read> x_17 : In1;
+@group(0) @binding(1) var<storage, read> x_17 : In1;
 
-[[group(0), binding(0)]] var<storage, read> x_19 : In0;
+@group(0) @binding(0) var<storage, read> x_19 : In0;
 
 fn main_1() {
   var base_index_in : u32;
@@ -109,8 +109,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(4, 1, 1)]]
-fn main([[builtin(workgroup_id)]] gl_WorkGroupID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(4, 1, 1)
+fn main(@builtin(workgroup_id) gl_WorkGroupID_param : vec3<u32>) {
   gl_WorkGroupID = gl_WorkGroupID_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl
index 7665283..646cf0f 100644
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl
+++ b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl
@@ -1,18 +1,18 @@
-type Arr = [[stride(4)]] array<i32, 8>;
+type Arr = @stride(4) array<i32, 8>;
 
 struct In2 {
   data_in2 : Arr;
 };
 
-type Arr_1 = [[stride(4)]] array<i32, 1024>;
+type Arr_1 = @stride(4) array<i32, 1024>;
 
 struct Out0 {
   data_out0 : Arr_1;
 };
 
-type Arr_2 = [[stride(4)]] array<i32, 512>;
+type Arr_2 = @stride(4) array<i32, 512>;
 
-type Arr_3 = [[stride(4)]] array<i32, 512>;
+type Arr_3 = @stride(4) array<i32, 512>;
 
 struct In0 {
   data_in0 : Arr_3;
@@ -24,13 +24,13 @@
 
 var<private> gl_WorkGroupID : vec3<u32>;
 
-[[group(0), binding(2)]] var<storage, read> x_13 : In2;
+@group(0) @binding(2) var<storage, read> x_13 : In2;
 
-[[group(0), binding(3)]] var<storage, read_write> x_15 : Out0;
+@group(0) @binding(3) var<storage, read_write> x_15 : Out0;
 
-[[group(0), binding(0)]] var<storage, read> x_17 : In0;
+@group(0) @binding(0) var<storage, read> x_17 : In0;
 
-[[group(0), binding(1)]] var<storage, read> x_19 : In1;
+@group(0) @binding(1) var<storage, read> x_19 : In1;
 
 fn main_1() {
   var base_index_in : u32;
@@ -109,8 +109,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(4, 1, 1)]]
-fn main([[builtin(workgroup_id)]] gl_WorkGroupID_param : vec3<u32>) {
+@stage(compute) @workgroup_size(4, 1, 1)
+fn main(@builtin(workgroup_id) gl_WorkGroupID_param : vec3<u32>) {
   gl_WorkGroupID = gl_WorkGroupID_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl
index c1d101c..a4fc561 100644
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl
+++ b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl
@@ -6,11 +6,11 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(color);
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl
index 702b117..6f3e895 100644
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl
+++ b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl
@@ -1,6 +1,6 @@
 var<private> color_out : vec4<f32>;
 
-[[group(0), binding(0)]] var texture : texture_2d<f32>;
+@group(0) @binding(0) var texture : texture_2d<f32>;
 
 var<private> gl_FragCoord : vec4<f32>;
 
@@ -12,12 +12,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(color_out);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl
index 2b3b645..dfcbf44 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl
@@ -2,15 +2,15 @@
   result : i32;
 };
 
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct Buf0 {
   values : RTArr;
 };
 
-[[group(0), binding(1)]] var<storage, read_write> x_4 : Buf1;
+@group(0) @binding(1) var<storage, read_write> x_4 : Buf1;
 
-[[group(0), binding(0)]] var<storage, read_write> x_7 : Buf0;
+@group(0) @binding(0) var<storage, read_write> x_7 : Buf0;
 
 fn main_1() {
   var i : u32;
@@ -37,7 +37,7 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
+@stage(compute) @workgroup_size(1, 1, 1)
 fn main() {
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl
index 0fee5ee..bed026c 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_2 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(1) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(2) var<storage, read_write> x_7 : S;
 
 fn main_1() {
   let x_21 : u32 = x_2.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_2_param : vec3<u32>) {
   x_2 = x_2_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl
index cf2536e..98535f6 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_2 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(1) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(2) var<storage, read_write> x_7 : S;
 
 fn main_1() {
   let x_21 : u32 = x_2.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_2_param : vec3<u32>) {
   x_2 = x_2_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl
index f842e24..516e08b 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_2 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(1) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(2) var<storage, read_write> x_7 : S;
 
 fn main_1() {
   let x_21 : u32 = x_2.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_2_param : vec3<u32>) {
   x_2 = x_2_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl
index 21548c6..fc4ae4a 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_2 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(1) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(2) var<storage, read_write> x_7 : S;
 
 fn main_1() {
   let x_21 : u32 = x_2.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_2_param : vec3<u32>) {
   x_2 = x_2_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl
index 51319ac..4f4872e 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<i32>;
+type RTArr = @stride(4) array<i32>;
 
 struct S {
   field0 : RTArr;
@@ -6,13 +6,13 @@
 
 var<private> x_3 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(0) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(1) var<storage, read_write> x_7 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
+@group(0) @binding(2) var<storage, read_write> x_8 : S;
 
-[[group(0), binding(3)]] var<storage, read_write> x_9 : S;
+@group(0) @binding(3) var<storage, read_write> x_9 : S;
 
 fn main_1() {
   let x_26 : u32 = x_3.x;
@@ -23,8 +23,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_3_param : vec3<u32>) {
   x_3 = x_3_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl
index 8abb109..0a7a6fd 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,9 +6,9 @@
 
 var<private> x_3 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(0) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(1) var<storage, read_write> x_7 : S;
 
 fn main_1() {
   let x_21 : u32 = x_3.x;
@@ -17,8 +17,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_3_param : vec3<u32>) {
   x_3 = x_3_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl
index fce79f04..52902a4 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,13 +6,13 @@
 
 var<private> x_3 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(0) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(1) var<storage, read_write> x_7 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
+@group(0) @binding(2) var<storage, read_write> x_8 : S;
 
-[[group(0), binding(3)]] var<storage, read_write> x_9 : S;
+@group(0) @binding(3) var<storage, read_write> x_9 : S;
 
 fn main_1() {
   let x_23 : u32 = x_3.x;
@@ -23,8 +23,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_3_param : vec3<u32>) {
   x_3 = x_3_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl
index c21661d..04a0297 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_3 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(0) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(1) var<storage, read_write> x_7 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
+@group(0) @binding(2) var<storage, read_write> x_8 : S;
 
 fn main_1() {
   let x_21 : u32 = x_3.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_3_param : vec3<u32>) {
   x_3 = x_3_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl
index f83857f..fd0938c 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_3 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(0) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(1) var<storage, read_write> x_7 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
+@group(0) @binding(2) var<storage, read_write> x_8 : S;
 
 fn main_1() {
   let x_21 : u32 = x_3.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_3_param : vec3<u32>) {
   x_3 = x_3_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl
index de05c79..2bbbe0b 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,11 +6,11 @@
 
 var<private> x_2 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(1) var<storage, read_write> x_6 : S;
 
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
+@group(0) @binding(2) var<storage, read_write> x_7 : S;
 
 fn main_1() {
   let x_20 : u32 = x_2.x;
@@ -20,8 +20,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_2_param : vec3<u32>) {
   x_2 = x_2_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl
index 3e60e98..f34494a 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<u32>;
+type RTArr = @stride(4) array<u32>;
 
 struct S {
   field0 : RTArr;
@@ -6,9 +6,9 @@
 
 var<private> x_2 : vec3<u32>;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
+@group(0) @binding(1) var<storage, read_write> x_6 : S;
 
 fn main_1() {
   let x_20 : u32 = x_2.x;
@@ -17,8 +17,8 @@
   return;
 }
 
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
+@stage(compute) @workgroup_size(1, 1, 1)
+fn main(@builtin(global_invocation_id) x_2_param : vec3<u32>) {
   x_2 = x_2_param;
   main_1();
 }
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl
index eef9fd1..5c734e3 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl
@@ -14,14 +14,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : u32;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_3_param : vec2<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_3_param : vec2<f32>) -> main_out {
   x_3 = x_3_param;
   main_1();
   return main_out(x_4, gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl
index bf7b1a4..74923da 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl
index 48a9583..1c90a48 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(color_out, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl
index 574d2de..5707fa3 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl
index df3c7e3..1620bac 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(color_out, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl
index f3aec87..507511d 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl
index 8bf833a..d20dbea 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(color_out, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl
index 1cc00dd..6e13950 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl
index 5051169..eabe436 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(color_out, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl
index 788ee5b..ac55a23 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl
index f71b320..7b85214 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl
index b6e0701..1566cc9 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(outColor, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl
index 9f726a7..310e6db 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(outColor, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl
index bc535ca..293f469 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(outColor, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl
index 0fe24e6..269e7da 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl
@@ -12,14 +12,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(outColor, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl
index 04a6db7..656c0ed 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(outColor, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl
index f6cb3ea..7c01a5c 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl
@@ -9,13 +9,13 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
+  @builtin(frag_depth)
   gl_FragDepth_1 : f32;
 };
 
-[[stage(fragment)]]
+@stage(fragment)
 fn main() -> main_out {
   main_1();
   return main_out(outColor, gl_FragDepth);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl
index 081740c..1ab42ae 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl
@@ -12,14 +12,14 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
-  [[location(0)]]
+  @location(0)
   pos_1 : u32;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec4<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position, pos);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl
index 9959aa6..0e32731 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl
@@ -14,14 +14,14 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] x_2_param : vec3<f32>, [[location(1)]] x_3_param : i32) -> main_out {
+@stage(vertex)
+fn main(@location(0) x_2_param : vec3<f32>, @location(1) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl
index 0f3c732..2cd673e 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl
@@ -4,7 +4,7 @@
 
 var<private> x_4 : i32;
 
-[[group(0), binding(0)]] var x_5 : texture_storage_2d<r32sint, write>;
+@group(0) @binding(0) var x_5 : texture_storage_2d<r32sint, write>;
 
 fn main_1() {
   x_4 = 1;
@@ -19,12 +19,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.glsl
index f63590e..34862ac 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl:27:70 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
                                                                      ^^^^^^^^^
 
 #version 310 es
@@ -62,7 +62,7 @@
 
 Error parsing GLSL shader:
 ERROR: 0:45: 'int' : must be qualified as flat in
-ERROR: 0:45: '' : compilation terminated 
+ERROR: 0:45: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl
index affcd63..07e6992 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl
@@ -14,12 +14,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.glsl
index c7468bb..2da1cc8 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl:22:70 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
                                                                      ^^^^^^^^^
 
 #version 310 es
@@ -58,7 +58,7 @@
 
 Error parsing GLSL shader:
 ERROR: 0:41: 'int' : must be qualified as flat in
-ERROR: 0:41: '' : compilation terminated 
+ERROR: 0:41: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl
index 3820a70..e1c76c9 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl
@@ -16,12 +16,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   out_data_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(out_data);
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl
index e0e933a..a849b1d 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl
@@ -14,12 +14,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.glsl
index 42a8717..fe31b1c 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl:22:70 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
                                                                      ^^^^^^^^^
 
 #version 310 es
@@ -59,7 +59,7 @@
 
 Error parsing GLSL shader:
 ERROR: 0:42: 'int' : must be qualified as flat in
-ERROR: 0:42: '' : compilation terminated 
+ERROR: 0:42: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl
index fd8dd5f..da18d12 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<i32>;
+type RTArr = @stride(4) array<i32>;
 
 struct S {
   field0 : RTArr;
@@ -10,7 +10,7 @@
 
 var<private> x_4 : i32;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
 fn main_1() {
   x_4 = 1;
@@ -25,12 +25,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl
index 41b83dd..f7d8197 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl:33:70 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
                                                                      ^^^^^^^^^
 
 #version 310 es
@@ -67,8 +67,8 @@
 
 
 Error parsing GLSL shader:
-ERROR: 0:5: '' : array size required 
-ERROR: 0:6: '' : compilation terminated 
+ERROR: 0:5: '' : array size required
+ERROR: 0:6: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl
index 4a8c8a7..48083ee 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl
@@ -1,4 +1,4 @@
-type RTArr = [[stride(4)]] array<i32>;
+type RTArr = @stride(4) array<i32>;
 
 struct S {
   field0 : RTArr;
@@ -10,7 +10,7 @@
 
 var<private> x_4 : i32;
 
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
+@group(0) @binding(0) var<storage, read_write> x_5 : S;
 
 fn main_1() {
   x_4 = 1;
@@ -25,12 +25,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl
index 4b8208a..6fe04b3 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl:33:70 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
                                                                      ^^^^^^^^^
 
 #version 310 es
@@ -68,8 +68,8 @@
 
 
 Error parsing GLSL shader:
-ERROR: 0:5: '' : array size required 
-ERROR: 0:6: '' : compilation terminated 
+ERROR: 0:5: '' : array size required
+ERROR: 0:6: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl
index 5142f3d..78ca88f 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl
@@ -29,12 +29,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   x_4_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
   x_2 = x_2_param;
   x_3 = x_3_param;
   main_1();
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.glsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.glsl
index 2d61612..b9ab85d 100644
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.glsl
+++ b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 SKIP: FAILED
 
 vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl:37:70 warning: integral user-defined fragment inputs must have a flat interpolation attribute
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
+fn main(@builtin(position) x_2_param : vec4<f32>, @location(0) x_3_param : i32) -> main_out {
                                                                      ^^^^^^^^^
 
 #version 310 es
@@ -73,7 +73,7 @@
 
 Error parsing GLSL shader:
 ERROR: 0:56: 'int' : must be qualified as flat in
-ERROR: 0:56: '' : compilation terminated 
+ERROR: 0:56: '' : compilation terminated
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl
index cfebf74..e62f918 100644
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl
+++ b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl
@@ -9,12 +9,12 @@
 }
 
 struct main_out {
-  [[builtin(position)]]
+  @builtin(position)
   gl_Position : vec4<f32>;
 };
 
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec3<f32>) -> main_out {
+@stage(vertex)
+fn main(@location(0) position_param : vec3<f32>) -> main_out {
   position = position_param;
   main_1();
   return main_out(gl_Position);
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl
index a3e9f614..bdf8be5 100644
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl
+++ b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl
@@ -22,12 +22,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   expect_1 : i32;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(expect);
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl
index cd7d76c..711a401 100644
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl
+++ b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl
@@ -9,12 +9,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   color_out_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[location(0)]] color_in_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@location(0) color_in_param : vec4<f32>) -> main_out {
   color_in = color_in_param;
   main_1();
   return main_out(color_out);
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl
index 2130c1a..ac4ba8a 100644
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl
+++ b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl
@@ -10,12 +10,12 @@
 }
 
 struct main_out {
-  [[location(0)]]
+  @location(0)
   result_1 : vec4<f32>;
 };
 
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+@stage(fragment)
+fn main(@builtin(position) gl_FragCoord_param : vec4<f32>) -> main_out {
   gl_FragCoord = gl_FragCoord_param;
   main_1();
   return main_out(result);