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/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();
 }