diff --git a/test/intrinsics/gen/abs/002533.wgsl.expected.glsl b/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
index a9d9604..7506230 100644
--- a/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_002533();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_002533();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/005174.wgsl.expected.glsl b/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
index 71f22f8..937d4f03 100644
--- a/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_005174();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_005174();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl b/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
index 1f4097a..d3ffa08 100644
--- a/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
@@ -54,11 +55,11 @@
   abs_1ce782();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
@@ -83,11 +84,11 @@
   abs_1ce782();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
diff --git a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
index cabdd21..5fdaf61 100644
--- a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_1e9d53();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_1e9d53();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl b/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
index 219081c..fe400bb4 100644
--- a/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -54,11 +55,11 @@
   abs_467cd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -83,11 +84,11 @@
   abs_467cd1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl b/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
index d13d663..8e23912 100644
--- a/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_4ad288();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_4ad288();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
index 87e4f31..3c90e55 100644
--- a/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_5ad50a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_5ad50a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl b/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
index cba64f1..149dfb5 100644
--- a/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
@@ -54,11 +55,11 @@
   abs_7326de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
@@ -83,11 +84,11 @@
   abs_7326de();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
diff --git a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
index 4040568..61a6d18 100644
--- a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
@@ -54,11 +55,11 @@
   abs_7f28e6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
@@ -83,11 +84,11 @@
   abs_7f28e6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'abs' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
index 5937ef3..668bba9 100644
--- a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_7faa9e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_7faa9e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
index 0d7c01a..c396532 100644
--- a/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_9c80a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_9c80a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl b/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
index 09f3cae..f5d5e91 100644
--- a/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
+++ b/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   abs_b96037();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   abs_b96037();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/489247.wgsl.expected.glsl b/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
index a70ce0b..9b74954 100644
--- a/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_489247();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_489247();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
index 6022d54..e6d69bd 100644
--- a/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_8e2acf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_8e2acf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl b/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
index 80ccb9b..20c61a6 100644
--- a/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_a610c4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_a610c4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl b/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
index 1c696f0..5d54b67 100644
--- a/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
+++ b/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   acos_dfc915();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   acos_dfc915();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl b/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
index 5873a4a..293dff0 100644
--- a/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'all' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -54,11 +55,11 @@
   all_353d6a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'all' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -83,11 +84,11 @@
   all_353d6a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'all' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
diff --git a/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl b/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
index 9da0a90..0e91cf6 100644
--- a/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   all_986c7b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   all_986c7b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl b/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
index f8de1d2..111a40a 100644
--- a/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   all_bd2dba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   all_bd2dba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/all/f46790.wgsl.expected.glsl b/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
index d3bc0fe..ca1909a 100644
--- a/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
+++ b/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   all_f46790();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   all_f46790();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/any/083428.wgsl.expected.glsl b/test/intrinsics/gen/any/083428.wgsl.expected.glsl
index 168f1d3..0e3b9ab 100644
--- a/test/intrinsics/gen/any/083428.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/083428.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   any_083428();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   any_083428();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl b/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
index 22a2676..e2b9708 100644
--- a/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   any_0e3e58();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   any_0e3e58();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl b/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
index eecacd1..fcfa374 100644
--- a/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'any' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -54,11 +55,11 @@
   any_2ab91a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'any' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -83,11 +84,11 @@
   any_2ab91a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'any' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
diff --git a/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl b/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
index c07e8ae..a729c5c 100644
--- a/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   any_e755c1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   any_e755c1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
index 79b0117..6b1d6e3 100644
--- a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   int arg_0[];
 } sb_ro;
-
 void arrayLength_1588cd() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   int arg_0[];
 } sb_ro;
-
 void arrayLength_1588cd() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_1588cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   int arg_0[];
 } sb_ro;
-
 void arrayLength_1588cd() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_1588cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
index 39316b0..452afab 100644
--- a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0[];
 } sb_rw;
-
 void arrayLength_61b1c7() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0[];
 } sb_rw;
-
 void arrayLength_61b1c7() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_61b1c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0[];
 } sb_rw;
-
 void arrayLength_61b1c7() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_61b1c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
index 98c7ec5..8c76c14 100644
--- a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   float arg_0[];
 } sb_ro;
-
 void arrayLength_a0f5ca() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   float arg_0[];
 } sb_ro;
-
 void arrayLength_a0f5ca() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_a0f5ca();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   float arg_0[];
 } sb_ro;
-
 void arrayLength_a0f5ca() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_a0f5ca();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
index 5b23df4..fa58e97 100644
--- a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   float arg_0[];
 } sb_rw;
-
 void arrayLength_cdd123() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   float arg_0[];
 } sb_rw;
-
 void arrayLength_cdd123() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_cdd123();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   float arg_0[];
 } sb_rw;
-
 void arrayLength_cdd123() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_cdd123();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
index a482ec8..5ac52d7 100644
--- a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   uint arg_0[];
 } sb_ro;
-
 void arrayLength_cfca0a() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   uint arg_0[];
 } sb_ro;
-
 void arrayLength_cfca0a() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_cfca0a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 1) buffer SB_RO_1 {
   uint arg_0[];
 } sb_ro;
-
 void arrayLength_cfca0a() {
   uint tint_symbol_2 = 0u;
   sb_ro.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_cfca0a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
index 54ac47a..006963f 100644
--- a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
@@ -3,11 +3,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0[];
 } sb_rw;
-
 void arrayLength_eb510f() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -30,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -38,10 +38,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -49,11 +48,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0[];
 } sb_rw;
-
 void arrayLength_eb510f() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -69,14 +66,14 @@
   arrayLength_eb510f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -84,11 +81,9 @@
 #version 310 es
 precision mediump float;
 
-
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0[];
 } sb_rw;
-
 void arrayLength_eb510f() {
   uint tint_symbol_2 = 0u;
   sb_rw.GetDimensions(tint_symbol_2);
@@ -105,14 +100,14 @@
   arrayLength_eb510f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: 'GetDimensions' : no such field in structure 
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:9: 'GetDimensions' : no such field in structure 
+ERROR: 0:9: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/asin/064953.wgsl.expected.glsl b/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
index 77c5c16..6f9fb5f 100644
--- a/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_064953();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_064953();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
index eb9d035..3cb463d 100644
--- a/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_7b6a44();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_7b6a44();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
index 74f5c46..26ae9688 100644
--- a/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_8cd9c9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_8cd9c9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl b/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
index 3b4521e..46b4799 100644
--- a/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
+++ b/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   asin_c0c272();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   asin_c0c272();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl b/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
index 6c7de9b..db1ced4 100644
--- a/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_02979a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_02979a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl b/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
index dfd43f2..1f9b3f4 100644
--- a/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_331e6d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_331e6d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl b/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
index 4adb5b2..68eeb28 100644
--- a/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_a8b696();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_a8b696();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
index 7f0420a..80f0885 100644
--- a/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan_ad96e4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan_ad96e4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
index 26eca58..c81d3b3 100644
--- a/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_57fb13();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_57fb13();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl b/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
index ab55de0..12b8b57 100644
--- a/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_96057c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_96057c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
index 49d65c5..ca014e6 100644
--- a/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_a70d0d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_a70d0d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
index e0bcc8a..58481e6 100644
--- a/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   atan2_ae713e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   atan2_ae713e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
index 55ffa25..715d36d 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicAdd_794055() {
   int res = atomicAdd(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
index a25340d..a718035 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAdd_8a199a() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicAdd_8a199a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAdd_8a199a() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicAdd_8a199a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
index 17d866b..6f142ad 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAdd_d32fe4() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicAdd_d32fe4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAdd_d32fe4() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicAdd_d32fe4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
index 9a3d9a1..77ff3cc 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicAdd_d5db1d() {
   uint res = atomicAdd(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
index 1bcff31..cb8b590 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAnd_152966() {
   int res = atomicAnd(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicAnd_152966();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicAnd_152966() {
   int res = atomicAnd(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicAnd_152966();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
index 8ab60de..893ba81 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicAnd_34edd3() {
   uint res = atomicAnd(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
index af28d89..29566d1 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicAnd_45a819() {
   int res = atomicAnd(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
index 7a483e0..9260151 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAnd_85a8d9() {
   uint res = atomicAnd(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicAnd_85a8d9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicAnd_85a8d9() {
   uint res = atomicAnd(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicAnd_85a8d9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
index 00386ca..3d91ea5 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_12871c() {
   ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
 }
@@ -25,11 +24,11 @@
   atomicCompareExchangeWeak_12871c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,7 +47,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_12871c() {
   ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
 }
@@ -58,8 +56,8 @@
   atomicCompareExchangeWeak_12871c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
index 7b5dda5..dd307ae 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
@@ -16,7 +16,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_6673da() {
   uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
 }
@@ -25,11 +24,11 @@
   atomicCompareExchangeWeak_6673da();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,7 +47,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicCompareExchangeWeak_6673da() {
   uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
 }
@@ -58,8 +56,8 @@
   atomicCompareExchangeWeak_6673da();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
index aaaf177..fc9c6e6 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
@@ -10,7 +10,6 @@
 
 
 shared int arg_0;
-
 void atomicCompareExchangeWeak_89ea3b() {
   ivec2 res = tint_atomicCompareExchangeWeak(arg_0, 1, 1);
 }
@@ -32,10 +31,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
index 03b6857..01162d8 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
@@ -10,7 +10,6 @@
 
 
 shared uint arg_0;
-
 void atomicCompareExchangeWeak_b2ab2c() {
   uvec2 res = tint_atomicCompareExchangeWeak(arg_0, 1u, 1u);
 }
@@ -32,10 +31,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
index c97fd12..ceb8f2c 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicExchange_0a5dca() {
   uint res = atomicExchange(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
index 93c7eb6..c8aeb19 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicExchange_d59712() {
   uint res = atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicExchange_d59712();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicExchange_d59712() {
   uint res = atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicExchange_d59712();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
index 52ae007..02874fa 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicExchange_e114ba() {
   int res = atomicExchange(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
index 1491b52..89206eb 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicExchange_f2e22f() {
   int res = atomicExchange(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicExchange_f2e22f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicExchange_f2e22f() {
   int res = atomicExchange(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicExchange_f2e22f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
index 649a8e5..e8ec1aa 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicLoad_0806ad() {
   int res = atomicOr(sb_rw.arg_0, 0);
 }
@@ -17,11 +16,11 @@
   atomicLoad_0806ad();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicLoad_0806ad() {
   int res = atomicOr(sb_rw.arg_0, 0);
 }
@@ -42,8 +40,8 @@
   atomicLoad_0806ad();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
index de8c6c6..ec67ef6 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicLoad_361bf1() {
   uint res = atomicOr(arg_0, 0u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
index 3f9ee82..f4c5fdc 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicLoad_afcc03() {
   int res = atomicOr(arg_0, 0);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
index 71fe30f..315bfe3 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicLoad_fe6cc3() {
   uint res = atomicOr(sb_rw.arg_0, 0u);
 }
@@ -17,11 +16,11 @@
   atomicLoad_fe6cc3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicLoad_fe6cc3() {
   uint res = atomicOr(sb_rw.arg_0, 0u);
 }
@@ -42,8 +40,8 @@
   atomicLoad_fe6cc3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
index e638604..2a92b96 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMax_51b9be() {
   uint res = atomicMax(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicMax_51b9be();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMax_51b9be() {
   uint res = atomicMax(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicMax_51b9be();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
index f51238d..953c280 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMax_92aa72() {
   int res = atomicMax(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicMax_92aa72();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMax_92aa72() {
   int res = atomicMax(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicMax_92aa72();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
index 8a4aadd..bda8cf5 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicMax_a89cc3() {
   int res = atomicMax(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
index 085ee2e..7ff699c 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicMax_beccfc() {
   uint res = atomicMax(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
index a3e2d3b..924c3e5 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicMin_278235() {
   int res = atomicMin(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
index 10e70a6..f872cf3 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicMin_69d383() {
   uint res = atomicMin(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
index edfeb6e..3ef1cad 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMin_8e38dc() {
   int res = atomicMin(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicMin_8e38dc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicMin_8e38dc() {
   int res = atomicMin(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicMin_8e38dc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
index 247ed1e..007cfa1 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMin_c67a74() {
   uint res = atomicMin(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicMin_c67a74();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicMin_c67a74() {
   uint res = atomicMin(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicMin_c67a74();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
index 9fd6dfb..2da57b8 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicOr_5e3d61() {
   uint res = atomicOr(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
index 905360c..e0066d7 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicOr_5e95d4() {
   uint res = atomicOr(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicOr_5e95d4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicOr_5e95d4() {
   uint res = atomicOr(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicOr_5e95d4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
index 5da969c..6e2be73 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicOr_8d96a0() {
   int res = atomicOr(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicOr_8d96a0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicOr_8d96a0() {
   int res = atomicOr(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicOr_8d96a0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
index 1bd396d..c2ab6ca 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicOr_d09248() {
   int res = atomicOr(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
index 1539167..4810df6 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicStore_726882() {
   atomicExchange(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
index d338acc..5c11b81 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicStore_8bea94() {
   atomicExchange(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
index 7c31721..1e0429d 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicStore_cdc29e() {
   atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicStore_cdc29e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicStore_cdc29e() {
   atomicExchange(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicStore_cdc29e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
index c2ab929..ac7fa98 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicStore_d1e9a6() {
   atomicExchange(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicStore_d1e9a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicStore_d1e9a6() {
   atomicExchange(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicStore_d1e9a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
index 3294fbd..bc8a2ee 100644
--- a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicSub_051100() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicSub_051100();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicSub_051100() {
   int res = atomicAdd(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicSub_051100();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
index b0bddda..f17a4f3 100644
--- a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicSub_0d26c2() {
   uint res = atomicAdd(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
index 537de87..118bced 100644
--- a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicSub_15bfc9() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicSub_15bfc9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicSub_15bfc9() {
   uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicSub_15bfc9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
index 9c70e99..c8331da 100644
--- a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicSub_77883a() {
   int res = atomicAdd(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
index e32e6b0..931dcf1 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicXor_54510e() {
   uint res = atomicXor(sb_rw.arg_0, 1u);
 }
@@ -17,11 +16,11 @@
   atomicXor_54510e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
-
 void atomicXor_54510e() {
   uint res = atomicXor(sb_rw.arg_0, 1u);
 }
@@ -42,8 +40,8 @@
   atomicXor_54510e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
index 9917356..464b9e7 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared int arg_0;
-
 void atomicXor_75dc95() {
   int res = atomicXor(arg_0, 1);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
index ce68be5..f91c27b 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
@@ -8,7 +8,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicXor_c1b78c() {
   int res = atomicXor(sb_rw.arg_0, 1);
 }
@@ -17,11 +16,11 @@
   atomicXor_c1b78c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +31,6 @@
 layout(binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
-
 void atomicXor_c1b78c() {
   int res = atomicXor(sb_rw.arg_0, 1);
 }
@@ -42,8 +40,8 @@
   atomicXor_c1b78c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
index bcc49d9..209ec0b 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 shared uint arg_0;
-
 void atomicXor_c8e6be() {
   uint res = atomicXor(arg_0, 1u);
 }
@@ -24,10 +23,11 @@
   compute_main_inner(tint_symbol.local_invocation_index);
   return;
 }
+
+
 void main() {
   tint_symbol_1 inputs;
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   compute_main(inputs);
 }
 
-
diff --git a/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl b/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
index 956a395..7fb4dc5 100644
--- a/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_34064b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_34064b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl b/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
index 31d306d..bf97f96 100644
--- a/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_678655();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_678655();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl b/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
index d917e31..52ced7b 100644
--- a/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_96f597();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_96f597();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
index 79d3a3c..1a3cac6 100644
--- a/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ceil_b74c16();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ceil_b74c16();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
index 8ed088e..103572c 100644
--- a/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_0acf8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_0acf8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
index 2efad4d..a2abc65 100644
--- a/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_1a32e3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_1a32e3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
index a443a31..73faf97 100644
--- a/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_2bd567();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_2bd567();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
index 3546e04..ed22707 100644
--- a/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_2bde41();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_2bde41();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
index 389d818..9bdda9e 100644
--- a/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_548fc7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_548fc7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
index dc61fb7..42ae5f6 100644
--- a/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_5f0819();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_5f0819();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
index 5f2a0ec..37b11b6 100644
--- a/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_6c1749();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_6c1749();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
index 614bb6a..2b225ed 100644
--- a/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_7706d7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_7706d7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl b/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
index 6b6fa98..7f078f6 100644
--- a/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_867397();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_867397();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
index e644d9a..dc2ca1e 100644
--- a/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_a2de25();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_a2de25();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
index 393f284..a9e6199 100644
--- a/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_b07c65();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_b07c65();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
index 22e0ec0..8cde9f3 100644
--- a/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
+++ b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   clamp_bd43ce();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   clamp_bd43ce();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl b/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
index d97825f..68bc55b 100644
--- a/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_16dc15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_16dc15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl b/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
index f80a3a3..775dbf3 100644
--- a/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_29d66d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_29d66d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl b/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
index 0718e00..49b902e 100644
--- a/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_c3b486();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_c3b486();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
index acd2840..bd2d098 100644
--- a/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cos_c5c28e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cos_c5c28e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl b/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
index 3fe5c6a..7771255 100644
--- a/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_377652();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_377652();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl b/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
index 8feca51..475471e 100644
--- a/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_c13756();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_c13756();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
index afbc396..76744dd 100644
--- a/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_da92dd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_da92dd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
index 25ccf66..7e6890e 100644
--- a/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cosh_e0c1de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cosh_e0c1de();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
index 11b663d..dec129c 100644
--- a/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
@@ -54,11 +55,11 @@
   countOneBits_0d0e46();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
@@ -83,11 +84,11 @@
   countOneBits_0d0e46();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
diff --git a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
index 053ca57..15fdfff 100644
--- a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
@@ -54,11 +55,11 @@
   countOneBits_0f7980();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
@@ -83,11 +84,11 @@
   countOneBits_0f7980();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
diff --git a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
index f910a7f..7baeb62 100644
--- a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
@@ -54,11 +55,11 @@
   countOneBits_65d2ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
@@ -83,11 +84,11 @@
   countOneBits_65d2ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
diff --git a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
index 1387754..c876810 100644
--- a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
@@ -54,11 +55,11 @@
   countOneBits_690cfc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
@@ -83,11 +84,11 @@
   countOneBits_690cfc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
diff --git a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
index 4cc6288..08a12e8 100644
--- a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
@@ -54,11 +55,11 @@
   countOneBits_94fd81();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
@@ -83,11 +84,11 @@
   countOneBits_94fd81();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
index 55d89f8..851ae33 100644
--- a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -54,11 +55,11 @@
   countOneBits_ae44f9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -83,11 +84,11 @@
   countOneBits_ae44f9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
index e907fc3..80fe35e 100644
--- a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
@@ -54,11 +55,11 @@
   countOneBits_af90e2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
@@ -83,11 +84,11 @@
   countOneBits_af90e2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
diff --git a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
index 40ac27a..0ef55de 100644
--- a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
@@ -54,11 +55,11 @@
   countOneBits_fd88b2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump int'
@@ -83,11 +84,11 @@
   countOneBits_fd88b2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'countbits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
diff --git a/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl b/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
index 6d93cb0..64fad74 100644
--- a/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   cross_041cb0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   cross_041cb0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl b/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl
index 684f3fb..55c0c7a 100644
--- a/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/0d170c.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_0d170c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_0d170c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl b/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl
index 8d35b2d..dd18b3b 100644
--- a/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/1ad5df.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_1ad5df();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_1ad5df();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl b/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl
index 2f1c095..447c798 100644
--- a/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/2af623.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_2af623();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_2af623();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl b/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl
index c576030..5135deb 100644
--- a/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl
+++ b/test/intrinsics/gen/degrees/51f705.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   degrees_51f705();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   degrees_51f705();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
index 1adff1a..b72337e 100644
--- a/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   determinant_2b62ba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   determinant_2b62ba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
index 8b716ef..f8b510f 100644
--- a/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   determinant_a0a87c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   determinant_a0a87c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl b/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
index 2e2e0d0..fc32243 100644
--- a/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
+++ b/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   determinant_e19305();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   determinant_e19305();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl b/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
index 4fb7b3d..a3c576e 100644
--- a/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_0657d4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_0657d4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl b/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
index a0773a8..0924832 100644
--- a/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_9646ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_9646ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl b/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
index cc3cdc4..9d95357 100644
--- a/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_aa4055();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_aa4055();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl b/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
index a38a90c..5b5a6bf 100644
--- a/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
+++ b/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   distance_cfed73();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   distance_cfed73();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl b/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
index 69e5674..27d3e7a 100644
--- a/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   dot_0c577b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   dot_0c577b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl b/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
index 22594ab..66d877d 100644
--- a/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_7548a0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_7548a0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl b/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
index 263b33d..f58fa99 100644
--- a/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   dot_883f0e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   dot_883f0e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
index ad17ac2..090d242 100644
--- a/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_97c7ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_97c7ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl b/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
index 3a4cec1..f8c73a8 100644
--- a/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   dot_ba4246();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   dot_ba4246();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl b/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
index 9ee8ab2..058ea47 100644
--- a/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_e994c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_e994c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
index 31c5cef..da0f7b0 100644
--- a/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_ef6b1d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_ef6b1d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl b/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
index 3e0d1f8..66e776e 100644
--- a/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_f1312c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_f1312c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
index 22d0dd2..3397372 100644
--- a/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -52,11 +53,11 @@
   dot_fc5f7c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -77,8 +78,8 @@
   dot_fc5f7c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
index b2c3e88..3751632 100644
--- a/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_0763f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
index b147755..3ed75b4 100644
--- a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_99edb1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
index 3201da8..3c5dee0 100644
--- a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_c487fa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
index 8d27891..9748587 100644
--- a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdx_e263de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
index 712cb2e1..312c91d 100644
--- a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_029152();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
index ca3f444..5144cdc 100644
--- a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_9581cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
index d748693..316a740 100644
--- a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_c28641();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
index 568db44..165c98a 100644
--- a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxCoarse_f64d7b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
index 1f79d0e..9849f53 100644
--- a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_8c5069();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
index 5890767..1b7f55c 100644
--- a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_9631de();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
index 99c60ca..e808df6 100644
--- a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_f401a2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
index 3e8c68f..4148812 100644
--- a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdxFine_f92fb6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
index b235c27..5af0963 100644
--- a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_699a05();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
index 7c20e0f..83f9149 100644
--- a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_7f8d84();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
index 82667ce..77cb336 100644
--- a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_a8b56e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
index baf086e..93993fb 100644
--- a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdy_feb40f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
index a4f7518..acc10ce 100644
--- a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_3e1ab4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
index 3872654..faccad9 100644
--- a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_445d24();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
index e650118..42ddd72 100644
--- a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_870a7e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
index b76372c..9d4bb1c 100644
--- a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyCoarse_ae1873();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
index 903fba0..339d386 100644
--- a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_1fb7ab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
index 4aafeb0..f616661 100644
--- a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_6eb673();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
index 532ff81..ad75956 100644
--- a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_d0a648();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
index 89a7b2c..c0cad99 100644
--- a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
@@ -11,11 +11,11 @@
   dpdyFine_df33aa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
index 5af098b..14b34b1 100644
--- a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_0f70eb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_0f70eb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl b/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
index e4384a7..62d16d5 100644
--- a/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_1951e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_1951e7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl b/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
index 7d9ef49..721e5dc 100644
--- a/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_771fd2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_771fd2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl b/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
index c40ee7e..acca67d 100644
--- a/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp_d98450();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp_d98450();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
index e9ecb77..a05fac6 100644
--- a/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_1f8680();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_1f8680();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
index 6194f99..0a6862d 100644
--- a/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_a9d0a7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_a9d0a7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
index e3d32d5..6cdab4d 100644
--- a/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_d6777c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_d6777c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl b/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
index c6d84db..f929267 100644
--- a/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
+++ b/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   exp2_dea523();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   exp2_dea523();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
index 5dbbc6d..4a9bdc4 100644
--- a/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   faceForward_5afbd5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   faceForward_5afbd5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
index e488435..6fccb43 100644
--- a/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   faceForward_b316e5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   faceForward_b316e5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
index 14d0f5d..80375c8 100644
--- a/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   faceForward_e6908b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   faceForward_e6908b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
index 1552c45..e3ece5a 100644
--- a/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_3bccc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_3bccc4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
index 8255234..d0cfbad 100644
--- a/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_5fc9ac();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_5fc9ac();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
index 234af63..25c718c 100644
--- a/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_60d7ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_60d7ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl b/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
index 8b00479..708bc06 100644
--- a/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
+++ b/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   floor_66f154();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   floor_66f154();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
index 65e2184..6a1c015 100644
--- a/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -54,11 +55,11 @@
   fma_26a7a9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -83,11 +84,11 @@
   fma_26a7a9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl b/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
index 7436355..8b2530b 100644
--- a/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -54,11 +55,11 @@
   fma_6a3283();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -83,11 +84,11 @@
   fma_6a3283();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
index 30e2d14..0d07f7b 100644
--- a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   fma_c10ba3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   fma_c10ba3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
index 7c0248e..a380e52 100644
--- a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -54,11 +55,11 @@
   fma_e17c5c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -83,11 +84,11 @@
   fma_e17c5c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'mad' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
index 0375ada..a8aa370 100644
--- a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -54,11 +55,11 @@
   fract_8bc1e9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -83,11 +84,11 @@
   fract_8bc1e9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl b/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
index 61ab739..3940b2d 100644
--- a/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -54,11 +55,11 @@
   fract_943cb1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -83,11 +84,11 @@
   fract_943cb1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl b/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
index 156d5e9..5204443 100644
--- a/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -54,11 +55,11 @@
   fract_a49758();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -83,11 +84,11 @@
   fract_a49758();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
index 3f97c82..3fadefa 100644
--- a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   fract_fa5c71();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   fract_fa5c71();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'frac' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl b/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl
index 1506936..a1f31ea 100644
--- a/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/368997.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec3 sig;
   ivec3 exp;
 };
+
 frexp_result_vec3 tint_frexp(vec3 param_0) {
   float3 exp;
   float3 sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec3 sig;
   ivec3 exp;
 };
+
 frexp_result_vec3 tint_frexp(vec3 param_0) {
   float3 exp;
   float3 sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_368997();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec3 sig;
   ivec3 exp;
 };
+
 frexp_result_vec3 tint_frexp(vec3 param_0) {
   float3 exp;
   float3 sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_368997();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl b/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl
index bf14350..8e0f6fdf 100644
--- a/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/3c4f48.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec4 sig;
   ivec4 exp;
 };
+
 frexp_result_vec4 tint_frexp(vec4 param_0) {
   float4 exp;
   float4 sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec4 sig;
   ivec4 exp;
 };
+
 frexp_result_vec4 tint_frexp(vec4 param_0) {
   float4 exp;
   float4 sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_3c4f48();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec4 sig;
   ivec4 exp;
 };
+
 frexp_result_vec4 tint_frexp(vec4 param_0) {
   float4 exp;
   float4 sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_3c4f48();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl b/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl
index ff8402c..2acbc9f 100644
--- a/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/4bdfc7.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec2 sig;
   ivec2 exp;
 };
+
 frexp_result_vec2 tint_frexp(vec2 param_0) {
   float2 exp;
   float2 sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec2 sig;
   ivec2 exp;
 };
+
 frexp_result_vec2 tint_frexp(vec2 param_0) {
   float2 exp;
   float2 sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_4bdfc7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec2 sig;
   ivec2 exp;
 };
+
 frexp_result_vec2 tint_frexp(vec2 param_0) {
   float2 exp;
   float2 sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_4bdfc7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl b/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl
index e16cc08..6892c1a 100644
--- a/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl
+++ b/test/intrinsics/gen/frexp/eabd40.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -77,14 +80,14 @@
   frexp_eabd40();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   float sig;
   int exp;
 };
+
 frexp_result tint_frexp(float param_0) {
   float exp;
   float sig = frexp(param_0, exp);
@@ -117,14 +121,14 @@
   frexp_eabd40();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:10: 'frexp' : no matching overloaded function found 
-ERROR: 0:10: '' : compilation terminated 
+ERROR: 0:11: 'frexp' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
index a0affd9..34122c5 100644
--- a/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_5d1b39();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
index 3a38177..ec1ced8 100644
--- a/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_b83ebb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
index 6d23f98..91563b7 100644
--- a/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_d2ab9a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
index fa13be7..43676d1 100644
--- a/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidth_df38ef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
index 0fa8940..135ec35 100644
--- a/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_159c8a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
index 13b779c..62de671 100644
--- a/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_1e59d9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
index 6f6634b..a7780a7 100644
--- a/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_4e4fc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
index 48db5ee..27c6a7c 100644
--- a/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthCoarse_e653f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
index 46ed62a..456f35c 100644
--- a/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_523fdc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
index ce3dbad..871b6a6 100644
--- a/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_68f4ef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
index 4441b46..8244f2f 100644
--- a/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_f1742d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
index bf921e2..7fc286d 100644
--- a/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
@@ -9,8 +9,8 @@
   fwidthFine_ff6aa0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
index a9d7595..9fbab2c 100644
--- a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_51aeb7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_51aeb7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl b/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
index d3e5912..455f5b2 100644
--- a/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_6698df();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_6698df();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
index 4f16889..c68bffc 100644
--- a/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_d91a2f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_d91a2f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
index 7e976a5..63c111f 100644
--- a/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   ignore_f414a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   ignore_f414a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
index 790d03b..64218af 100644
--- a/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   inverseSqrt_84407e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   inverseSqrt_84407e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
index bb7a249..2e339a4 100644
--- a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -54,11 +55,11 @@
   inverseSqrt_8f2bd2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
@@ -83,11 +84,11 @@
   inverseSqrt_8f2bd2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
diff --git a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
index d4f4e54..44afdde 100644
--- a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -54,11 +55,11 @@
   inverseSqrt_b197b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
@@ -83,11 +84,11 @@
   inverseSqrt_b197b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
diff --git a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
index 6725af4..f9371f7 100644
--- a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
+++ b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -54,11 +55,11 @@
   inverseSqrt_c22347();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
@@ -83,11 +84,11 @@
   inverseSqrt_c22347();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
index 0d46074..9c34884 100644
--- a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 2-component vector of bool'
@@ -58,11 +59,11 @@
   isFinite_34d32b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 2-component vector of bool'
@@ -87,11 +88,11 @@
   isFinite_34d32b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 2-component vector of bool'
diff --git a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
index 2fd72b3..47a43a4 100644
--- a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -58,11 +59,11 @@
   isFinite_426f9f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
@@ -87,11 +88,11 @@
   isFinite_426f9f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp bool'
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
index 91124f9..8486ac9 100644
--- a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 3-component vector of bool'
@@ -58,11 +59,11 @@
   isFinite_8a23ad();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 3-component vector of bool'
@@ -87,11 +88,11 @@
   isFinite_8a23ad();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 3-component vector of bool'
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
index 395c892..a2870a9 100644
--- a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
@@ -26,6 +26,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -34,7 +36,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
@@ -58,11 +59,11 @@
   isFinite_f31987();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
@@ -87,11 +88,11 @@
   isFinite_f31987();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'isfinite' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
index 870a48f..36f99fe 100644
--- a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_666f2a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_666f2a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
index bb37301..56e4d76 100644
--- a/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_7bd98f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_7bd98f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
index 77035e8..a1c971a 100644
--- a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_7e81b5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_7e81b5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
index 2bb0f8c..7c0559f 100644
--- a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isInf_a46d6f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isInf_a46d6f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
index 3e392cc..9221d99 100644
--- a/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_1280ab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_1280ab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
index 0da055c..ea662da 100644
--- a/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_4d280d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_4d280d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
index e7ec27b..5fae942 100644
--- a/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_67ecd3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_67ecd3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
index 8033cb1..81a59da 100644
--- a/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
@@ -24,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -48,11 +49,11 @@
   isNan_e4978e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -69,8 +70,8 @@
   isNan_e4978e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
index 23d8edf..6b4953e 100644
--- a/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -71,11 +72,11 @@
   isNormal_863dcd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -106,11 +107,11 @@
   isNormal_863dcd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
index 53e9308..09a02d1 100644
--- a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -71,11 +72,11 @@
   isNormal_b00ab1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -106,11 +107,11 @@
   isNormal_b00ab1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
index fdd976b..959e3d4 100644
--- a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint3' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -71,11 +72,11 @@
   isNormal_c286b7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint3' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -106,11 +107,11 @@
   isNormal_c286b7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint3' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
index 58fb928..047b030 100644
--- a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
+++ b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -41,7 +43,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'asuint' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -72,11 +73,11 @@
   isNormal_c6e880();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'asuint' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -108,11 +109,11 @@
   isNormal_c6e880();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'asuint' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
index 2ce0179..52421d5 100644
--- a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_a31cdc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_a31cdc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
index d331a20..517e258 100644
--- a/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_abd718();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_abd718();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
index 38cd6b5..24485b4 100644
--- a/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_cc9cde();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_cc9cde();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
index c34ebd0..113b4c3 100644
--- a/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
+++ b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   ldexp_db8b49();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   ldexp_db8b49();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/056071.wgsl.expected.glsl b/test/intrinsics/gen/length/056071.wgsl.expected.glsl
index 1316030..3b119de 100644
--- a/test/intrinsics/gen/length/056071.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/056071.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_056071();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_056071();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/602a17.wgsl.expected.glsl b/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
index 59c2009..ce4b832 100644
--- a/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_602a17();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_602a17();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl b/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
index c59c8834..d86ccd3 100644
--- a/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_afde8b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_afde8b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/length/becebf.wgsl.expected.glsl b/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
index 9d9618c..7486516 100644
--- a/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   length_becebf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   length_becebf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl b/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
index 234a002..1bc35fb 100644
--- a/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_3da25a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_3da25a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl b/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
index a24f791..46d72a1 100644
--- a/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_7114a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_7114a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl b/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
index f93a0bc..aa63407 100644
--- a/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_b2ce28();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_b2ce28();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl b/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
index 0256c6c..2171e83 100644
--- a/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log_f4c570();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log_f4c570();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl b/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
index 7eda0dd..a3cbb0d 100644
--- a/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_4036ed();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_4036ed();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/902988.wgsl.expected.glsl b/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
index f62ea98..23d35bc 100644
--- a/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_902988();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_902988();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl b/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
index 1c68e82..5cc3c47 100644
--- a/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_adb233();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_adb233();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl b/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
index da187fe..ad3b77a 100644
--- a/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
+++ b/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   log2_aea659();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   log2_aea659();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl b/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
index 26b2d96..63560d0 100644
--- a/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_0c0aae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_0c0aae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl b/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
index 936d5e6..730e3d3 100644
--- a/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_25eafe();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_25eafe();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/320815.wgsl.expected.glsl b/test/intrinsics/gen/max/320815.wgsl.expected.glsl
index e72fe51..8e21639 100644
--- a/test/intrinsics/gen/max/320815.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/320815.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_320815();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_320815();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl b/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
index 1b72e31..2d87a72 100644
--- a/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_44a39d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_44a39d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/453e04.wgsl.expected.glsl b/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
index 19e7f1f..f0127c4 100644
--- a/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_453e04();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_453e04();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/462050.wgsl.expected.glsl b/test/intrinsics/gen/max/462050.wgsl.expected.glsl
index 0c680c9..db7e098 100644
--- a/test/intrinsics/gen/max/462050.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/462050.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_462050();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_462050();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl b/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
index f1fe35a..e418b79 100644
--- a/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_4883ac();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_4883ac();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl b/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
index 8c916c8..662db4e 100644
--- a/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_85e6bc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_85e6bc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/a93419.wgsl.expected.glsl b/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
index ba1ee86..d39362b 100644
--- a/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_a93419();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_a93419();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl b/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
index e4a3b6d..bad55c7 100644
--- a/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_b1b73a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_b1b73a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl b/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
index 4221ecd..e9496f3 100644
--- a/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_ce7c30();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_ce7c30();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl b/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
index 14fc550..eead06e 100644
--- a/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   max_e8192f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   max_e8192f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl b/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
index f92e9cb..21670e2 100644
--- a/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_03c7e3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_03c7e3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl b/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
index 980a701..23d6a58 100644
--- a/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_0dc614();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_0dc614();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl b/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
index 6f40cd9..5df9bdc 100644
--- a/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_3941e1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_3941e1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl b/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
index 72f91a5..138a485 100644
--- a/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_46c5d3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_46c5d3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl b/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
index e3845f7..c1d244a 100644
--- a/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_82b28f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_82b28f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl b/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
index dc784fd..ea51f49 100644
--- a/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_93cfc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_93cfc4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/a45171.wgsl.expected.glsl b/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
index e8b51fd..43bee8b 100644
--- a/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_a45171();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_a45171();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl b/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
index 95169e0..eb5a4b0 100644
--- a/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_aa28ad();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_aa28ad();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/af326d.wgsl.expected.glsl b/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
index 23e2ce1..1090dab 100644
--- a/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_af326d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_af326d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl b/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
index ce53401..09ecc63 100644
--- a/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_c70bb7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_c70bb7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/c73147.wgsl.expected.glsl b/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
index 747e2ed..914a4b3 100644
--- a/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_c73147();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_c73147();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl b/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
index 07477ab..a6b8d73 100644
--- a/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   min_c76fa6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   min_c76fa6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
index 27d05de..5d2c8c9 100644
--- a/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_0c8c33();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_0c8c33();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
index 6ebd051..baca38f 100644
--- a/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_1faeb1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_1faeb1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl b/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
index e8f7679..9267428 100644
--- a/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_2fadab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_2fadab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/315264.wgsl.expected.glsl b/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
index 3bdb9d0..474594f 100644
--- a/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_315264();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_315264();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
index 2c2bb45..df22fe4 100644
--- a/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_4f0b5e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_4f0b5e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
index 49ff4c3..0d74119 100644
--- a/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_6f8adc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_6f8adc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl b/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
index cb6d7e3..69908a3 100644
--- a/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
+++ b/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   mix_c37ede();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   mix_c37ede();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl b/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl
index efa2621..7ca9bdf 100644
--- a/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/180fed.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_180fed();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   float fract;
   float whole;
 };
+
 modf_result tint_modf(float param_0) {
   float whole;
   float fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_180fed();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
-ERROR: 0:11: '' : compilation terminated 
+ERROR: 0:12: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:12: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl b/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl
index 4f22fcf..01bd4b3 100644
--- a/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/9b75f7.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec3 fract;
   vec3 whole;
 };
+
 modf_result_vec3 tint_modf(vec3 param_0) {
   float3 whole;
   float3 fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec3 fract;
   vec3 whole;
 };
+
 modf_result_vec3 tint_modf(vec3 param_0) {
   float3 whole;
   float3 fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_9b75f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec3 fract;
   vec3 whole;
 };
+
 modf_result_vec3 tint_modf(vec3 param_0) {
   float3 whole;
   float3 fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_9b75f7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float3' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float3' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl b/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl
index 0229c44..603abe5 100644
--- a/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/ec2dbc.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec4 fract;
   vec4 whole;
 };
+
 modf_result_vec4 tint_modf(vec4 param_0) {
   float4 whole;
   float4 fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec4 fract;
   vec4 whole;
 };
+
 modf_result_vec4 tint_modf(vec4 param_0) {
   float4 whole;
   float4 fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_ec2dbc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec4 fract;
   vec4 whole;
 };
+
 modf_result_vec4 tint_modf(vec4 param_0) {
   float4 whole;
   float4 fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_ec2dbc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float4' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float4' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl b/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl
index 4848cee..c3fde70 100644
--- a/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/modf/f5f20d.wgsl.expected.glsl
@@ -7,6 +7,7 @@
   vec2 fract;
   vec2 whole;
 };
+
 modf_result_vec2 tint_modf(vec2 param_0) {
   float2 whole;
   float2 fract = modf(param_0, whole);
@@ -34,6 +35,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -42,10 +45,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -57,6 +59,7 @@
   vec2 fract;
   vec2 whole;
 };
+
 modf_result_vec2 tint_modf(vec2 param_0) {
   float2 whole;
   float2 fract = modf(param_0, whole);
@@ -77,14 +80,14 @@
   modf_f5f20d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -96,6 +99,7 @@
   vec2 fract;
   vec2 whole;
 };
+
 modf_result_vec2 tint_modf(vec2 param_0) {
   float2 whole;
   float2 fract = modf(param_0, whole);
@@ -117,14 +121,14 @@
   modf_f5f20d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:9: 'float2' : undeclared identifier 
-ERROR: 0:9: '' : compilation terminated 
+ERROR: 0:10: 'float2' : undeclared identifier 
+ERROR: 0:10: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
index 50ca5bf..4558248 100644
--- a/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   normalize_64d8c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   normalize_64d8c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
index 02f8bd9..959ddaf 100644
--- a/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   normalize_9a0aab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   normalize_9a0aab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
index f0eb1f5..8c9aaef 100644
--- a/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   normalize_fc2ef1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   normalize_fc2ef1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
index 8335d30..efb873d 100644
--- a/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack2x16float_0e97b3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack2x16float_0e97b3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
index 3e7fe19..f3e88a8 100644
--- a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack2x16snorm_6c169b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack2x16snorm_6c169b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
index bf3bafb..039d0c5 100644
--- a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack2x16unorm_0f08e4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack2x16unorm_0f08e4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint2' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
index c183181..bdb1fa7 100644
--- a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack4x8snorm_4d22e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack4x8snorm_4d22e7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'int4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
index 4da2c32..354a8bf 100644
--- a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -65,11 +66,11 @@
   pack4x8unorm_95c456();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
@@ -99,11 +100,11 @@
   pack4x8unorm_95c456();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'uint4' : undeclared identifier 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl b/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
index a336cc9..82ecafa 100644
--- a/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_04a908();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_04a908();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl b/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
index d70fc2f..da16789 100644
--- a/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_46e029();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_46e029();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
index 6691e7a..f1c85fc 100644
--- a/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_4a46c9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_4a46c9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
index df359b2..a52a87f 100644
--- a/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   pow_e60ea5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   pow_e60ea5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl b/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl
index 270c9d2..fbfd57b 100644
--- a/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/09b7fc.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_09b7fc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_09b7fc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl b/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl
index f2c469a..0c61f00 100644
--- a/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/61687a.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_61687a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_61687a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl b/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl
index 4494c76..48c9109 100644
--- a/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/6b0ff2.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_6b0ff2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_6b0ff2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl b/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl
index 2cf878e..e27a435 100644
--- a/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl
+++ b/test/intrinsics/gen/radians/f96258.wgsl.expected.glsl
@@ -25,6 +25,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +35,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -54,11 +55,11 @@
   radians_f96258();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -80,8 +81,8 @@
   radians_f96258();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl b/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
index 7d81f8f..34b7aab 100644
--- a/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   reflect_05357e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   reflect_05357e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
index 90303df..423ee1e 100644
--- a/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   reflect_b61e10();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   reflect_b61e10();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
index e4edf09..32b62a0 100644
--- a/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   reflect_f47fdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   reflect_f47fdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
index 9f3ea85..c46e333 100644
--- a/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   refract_7e02e6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   refract_7e02e6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
index b1361ee..f7e95c4 100644
--- a/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   refract_cbc1d2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   refract_cbc1d2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl b/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
index 12a9689..0f1a3de 100644
--- a/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   refract_cd905f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   refract_cd905f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
index 1f240b4..bad1323 100644
--- a/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
@@ -54,11 +55,11 @@
   reverseBits_222177();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
@@ -83,11 +84,11 @@
   reverseBits_222177();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
diff --git a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
index ca98e70..13f72b8 100644
--- a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
@@ -54,11 +55,11 @@
   reverseBits_35fea9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
@@ -83,11 +84,11 @@
   reverseBits_35fea9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
diff --git a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
index d6af58f..b512ef1 100644
--- a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
@@ -54,11 +55,11 @@
   reverseBits_4dbd6f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
@@ -83,11 +84,11 @@
   reverseBits_4dbd6f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
diff --git a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
index 9dcf4bc..b655cf2 100644
--- a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
@@ -54,11 +55,11 @@
   reverseBits_7c4269();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump int'
@@ -83,11 +84,11 @@
   reverseBits_7c4269();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp int'
diff --git a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
index 54e3baa..5956ce2 100644
--- a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
@@ -54,11 +55,11 @@
   reverseBits_a6ccd4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of uint'
@@ -83,11 +84,11 @@
   reverseBits_a6ccd4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of uint'
diff --git a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
index cf95586..d79516d 100644
--- a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
@@ -54,11 +55,11 @@
   reverseBits_c21bc1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
@@ -83,11 +84,11 @@
   reverseBits_c21bc1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
diff --git a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
index 9a17b8c..4d22669 100644
--- a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
@@ -54,11 +55,11 @@
   reverseBits_e1f4c1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of uint'
@@ -83,11 +84,11 @@
   reverseBits_e1f4c1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of uint'
diff --git a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
index ff07c39..de78187 100644
--- a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
@@ -54,11 +55,11 @@
   reverseBits_e31adf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump uint'
@@ -83,11 +84,11 @@
   reverseBits_e31adf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: 'reversebits' : no matching overloaded function found 
 ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp highp uint'
diff --git a/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl b/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
index 088e98a..543cdfa 100644
--- a/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_106c0b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_106c0b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl b/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
index 8a1f931..938fc0a 100644
--- a/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_1c7897();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_1c7897();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl b/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
index b4bdde7..1747df8 100644
--- a/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_52c84d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_52c84d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl b/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
index d42fb3b..faa0f32 100644
--- a/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
+++ b/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   round_9edc38();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   round_9edc38();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/00b848.wgsl.expected.glsl b/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
index bcdbc9c..a6559e0 100644
--- a/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_00b848();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_00b848();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
index 8ee7a9c..c414d87 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_01e2cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_01e2cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl b/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
index 953ba8e..4aac921 100644
--- a/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_087ea4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_087ea4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl b/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
index bb3b71b..1c22a52 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_1e960b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_1e960b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.glsl b/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
index 5bb9c40..239efd1 100644
--- a/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_266aff();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_266aff();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl b/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
index 796be36..303c8ee 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_28a27e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_28a27e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl b/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
index 3790d14..b89b649 100644
--- a/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_3c25ce();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_3c25ce();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/416e14.wgsl.expected.glsl b/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
index 9d3f859..df0fd7e 100644
--- a/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_416e14();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_416e14();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/51b047.wgsl.expected.glsl b/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
index 2bf0d76..e8c162b 100644
--- a/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_51b047();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_51b047();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/713567.wgsl.expected.glsl b/test/intrinsics/gen/select/713567.wgsl.expected.glsl
index c46f90e..6c78e34 100644
--- a/test/intrinsics/gen/select/713567.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/713567.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_713567();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_713567();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl b/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
index d4cbe6a..285c139 100644
--- a/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_78be5f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_78be5f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl b/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
index 752a9a6..49e4ec5 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_80a9a9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_80a9a9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl b/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
index ddd9d4a..fb5d604 100644
--- a/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_8fa62c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_8fa62c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/99f883.wgsl.expected.glsl b/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
index b38da75..c4a5fdb 100644
--- a/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_99f883();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_99f883();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl b/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
index 034f6de..823a57d 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_a2860e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_a2860e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl b/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
index 376b4c9..61f2ca1 100644
--- a/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_ab069f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_ab069f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/b04721.wgsl.expected.glsl b/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
index 3f1e5e9..816bbbf 100644
--- a/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_b04721();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_b04721();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl b/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
index d755711..554f56e 100644
--- a/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_bb447f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_bb447f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl b/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
index 5220945..d2b1607 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_bb8aae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_bb8aae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl b/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
index f09b1288..8cf102e 100644
--- a/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_bf3d29();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_bf3d29();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl b/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
index 4055abb..6cc94bc 100644
--- a/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_c31f9e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_c31f9e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl b/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
index fbd94e1..ca938a8 100644
--- a/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_c41bd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_c41bd1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
index d1112ca..ab85b6e 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_c4a4ef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_c4a4ef();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl b/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
index f495bf0..89cfd90 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_cb9301();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_cb9301();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl b/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
index edd3d6a..88d5c1a 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_e3e028();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_e3e028();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
index 291479b..7158954 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
@@ -22,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,7 +32,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -53,11 +54,11 @@
   select_ebfea2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
@@ -81,11 +82,11 @@
   select_ebfea2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:5: '' : boolean expression expected 
 ERROR: 0:5: '' : compilation terminated 
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl b/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
index b5a024e..4e8bed7 100644
--- a/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_ed8a15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_ed8a15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl b/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
index ded66c1..b928a2d 100644
--- a/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
+++ b/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   select_fb7e53();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   select_fb7e53();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/159665.wgsl.expected.glsl b/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
index 594594bd..37c7796 100644
--- a/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_159665();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_159665();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl b/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
index 231bae2..cd159a8 100644
--- a/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_b8f634();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_b8f634();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl b/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
index b9897f1..f19d9da 100644
--- a/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_d065d8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_d065d8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl b/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
index cbb2304..4a4a7d1 100644
--- a/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sign_dd790e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sign_dd790e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl b/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
index 51d31ee..0dcac18 100644
--- a/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_01f241();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_01f241();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl b/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
index f34b822..56583fd 100644
--- a/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_4e3979();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_4e3979();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl b/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
index d849a11..e4382fa 100644
--- a/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_b78c91();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_b78c91();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
index d1e42e7..6a5df55 100644
--- a/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sin_fc8bc4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sin_fc8bc4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl b/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
index 5401860..81eb153 100644
--- a/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_445e33();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_445e33();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
index 6c2544d..37ed119 100644
--- a/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_7bb598();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_7bb598();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
index dff0577..43896ef 100644
--- a/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_b9860e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_b9860e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
index a6fdb9a..aa91888 100644
--- a/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sinh_c9a5eb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sinh_c9a5eb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
index e2086a4..8555078 100644
--- a/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_5f615b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_5f615b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
index 0ed1f2b..3c64b14 100644
--- a/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_658be3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_658be3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
index f43d9e5..0d3cc99 100644
--- a/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_c11eef();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_c11eef();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
index 83171c6..d18d1ff 100644
--- a/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   smoothStep_cb0bfb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   smoothStep_cb0bfb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
index 1a9092b..87e1877 100644
--- a/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_20c74e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_20c74e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
index d6c2d16..9f52b9f 100644
--- a/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_8c7024();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_8c7024();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
index 2f6ae9e..32e6ead 100644
--- a/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_aa0d7a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_aa0d7a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
index 4679c12..d2209a9 100644
--- a/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   sqrt_f8c59a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   sqrt_f8c59a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl b/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
index 306bcac..0f72929 100644
--- a/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_0b073b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_0b073b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/19accd.wgsl.expected.glsl b/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
index 87cd641..7d2918f 100644
--- a/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_19accd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_19accd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/334303.wgsl.expected.glsl b/test/intrinsics/gen/step/334303.wgsl.expected.glsl
index 1a62355..f322369 100644
--- a/test/intrinsics/gen/step/334303.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/334303.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_334303();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_334303();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl b/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
index 753b13d..d79c9a9 100644
--- a/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
+++ b/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   step_e2b337();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   step_e2b337();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
index 289b86f..52d6446 100644
--- a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
@@ -10,8 +10,8 @@
   storageBarrier_d87211();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl b/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
index 3443c6f..d4c23fb 100644
--- a/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_244e2a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_244e2a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl b/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
index 3f9de1a..65b6d14 100644
--- a/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_2f030e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_2f030e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl b/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
index 919a434..3725d7b 100644
--- a/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_7ea104();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_7ea104();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
index b3aa74d..4e2ce26 100644
--- a/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tan_8ce3e9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tan_8ce3e9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
index 63f6833..75d7d83 100644
--- a/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_5663c5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_5663c5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
index a2c5b4e..cfccd02 100644
--- a/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_5724b3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_5724b3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
index 5973331..0f13e27 100644
--- a/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_9f9fb9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_9f9fb9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
index a4ef21a..d750eed 100644
--- a/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   tanh_c15fdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   tanh_c15fdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
index 0f60c4c..14f92e4 100644
--- a/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_002b2a() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_002b2a() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_002b2a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_002b2a() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_002b2a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
index f593650..2c55d06 100644
--- a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_012b82() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_012b82() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_012b82();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_012b82() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_012b82();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
index b044497..48a35aa 100644
--- a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_08753d() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_08753d() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_08753d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_08753d() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_08753d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
index 58e3f09..7a591c0 100644
--- a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_0c4772() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_0c4772() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_0c4772();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_0c4772() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_0c4772();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
index ac5415c..c22bc6f 100644
--- a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_0cce40() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_0cce40() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_0cce40();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_0cce40() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_0cce40();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
index 413b4f8..b469d25 100644
--- a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_0cf2ff() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_0cf2ff() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_0cf2ff();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_0cf2ff() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_0cf2ff();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
index 1368767..c9e5480 100644
--- a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_0d8b7e() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_0d8b7e() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_0d8b7e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_0d8b7e() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_0d8b7e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
index ce1b64b..aa2ecfa 100644
--- a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_0e32ee() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_0e32ee() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_0e32ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_0e32ee() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_0e32ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
index 8fb03be..5c0b2c3 100644
--- a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_0f3c50() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_0f3c50() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_0f3c50();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_0f3c50() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_0f3c50();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
index 2507c32..4967d80 100644
--- a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_1191a5() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_1191a5() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_1191a5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_1191a5() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_1191a5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
index bccba0b..d650570 100644
--- a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_12c9bb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_12c9bb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_12c9bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_12c9bb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_12c9bb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
index 33dbdb6..4f4b229 100644
--- a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_147998() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_147998() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_147998();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_147998() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_147998();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
index f912185..36e6ad4 100644
--- a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_16036c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_16036c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_16036c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_16036c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_16036c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
index a83fbb9..2fd6faa 100644
--- a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_1b71f0() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_1b71f0() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_1b71f0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_1b71f0() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_1b71f0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
index 56fe634..0da782c 100644
--- a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_1d6c26() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_1d6c26() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_1d6c26();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_1d6c26() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_1d6c26();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
index 05a17aa..23f9499 100644
--- a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_1e9e39() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_1e9e39() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_1e9e39();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_1e9e39() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_1e9e39();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
index 5aeb255..5017607 100644
--- a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_1f20c5() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_1f20c5() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_1f20c5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_1f20c5() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_1f20c5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
index 5ab8cb0..8f243b6 100644
--- a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_214dd4() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_214dd4() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_214dd4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_214dd4() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_214dd4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
index 719dfa5..1042e3c 100644
--- a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_221f22() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_221f22() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_221f22();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_221f22() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_221f22();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
index 231b3b2..c507366 100644
--- a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_267788() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_267788() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_267788();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureDimensions_267788() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_267788();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
index 0c1b611..41a9191 100644
--- a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_26bdfa() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_26bdfa() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_26bdfa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_26bdfa() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_26bdfa();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
index 57baecf..2af5f61 100644
--- a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_26ef6c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_26ef6c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_26ef6c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_26ef6c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_26ef6c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
index 2c47ea9..3022183 100644
--- a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_2ad087() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_2ad087() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2ad087();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_2ad087() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2ad087();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
index a8a428b..d479f5d 100644
--- a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_2efa05() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_2efa05() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2efa05();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_2efa05() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2efa05();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
index cd8540d..0e911ec 100644
--- a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_2f289f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_2f289f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2f289f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_2f289f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2f289f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
index 8a467fb..f5a17e6 100644
--- a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_2fe1cc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_2fe1cc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_2fe1cc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_2fe1cc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_2fe1cc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
index 74872a4..3398fc9 100644
--- a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_318ecc() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_318ecc() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_318ecc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_318ecc() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_318ecc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
index 5be1dd0..fcc1764 100644
--- a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_340d06() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_340d06() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_340d06();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_340d06() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_340d06();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
index 854f888..4a6a6ad 100644
--- a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_398e30() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_398e30() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_398e30();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_398e30() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_398e30();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
index 73a1b29..883af99 100644
--- a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_3a94ea() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_3a94ea() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_3a94ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_3a94ea() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_3a94ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
index 050a238..7af209e 100644
--- a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_3aca08() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_3aca08() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_3aca08();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_3aca08() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_3aca08();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
index c3c8c62..e930f20 100644
--- a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_3c5ad8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_3c5ad8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_3c5ad8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_3c5ad8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_3c5ad8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
index 8dd6ca1..7eb9fe1 100644
--- a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_4152a6() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_4152a6() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_4152a6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_4152a6() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_4152a6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
index a2dbeb6..c0c95d2 100644
--- a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_423f99() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_423f99() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_423f99();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_423f99() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_423f99();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
index 6c7255e..7b34430 100644
--- a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_4267ee() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_4267ee() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_4267ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_4267ee() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_4267ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
index 4d2620d..ff1dc83 100644
--- a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_42d4e6() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_42d4e6() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_42d4e6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_42d4e6() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_42d4e6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
index 9581a35..dedc3e5 100644
--- a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_48cb89() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_48cb89() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_48cb89();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_48cb89() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_48cb89();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
index d3f8a37..b86ec80 100644
--- a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_49d274() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_49d274() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -57,11 +56,11 @@
   textureDimensions_49d274();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_49d274() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -87,11 +85,11 @@
   textureDimensions_49d274();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
index cc416b2..1b3d08f 100644
--- a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_4df9a8() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_4df9a8() {
   int res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_4df9a8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_4df9a8() {
   int res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_4df9a8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
index 28bcc15..2dc6825 100644
--- a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_50a9ee() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_50a9ee() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_50a9ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_50a9ee() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_50a9ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
index 5b94938..2322ae5 100644
--- a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_52045c() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_52045c() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_52045c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureDimensions_52045c() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_52045c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
index b0f533c..6edb647 100644
--- a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_55b23e() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_55b23e() {
   int res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_55b23e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_55b23e() {
   int res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_55b23e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
index 8b9bec3..bb33254 100644
--- a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureDimensions_579629() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureDimensions_579629() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_579629();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureDimensions_579629() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_579629();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
index 7fbf196..a2a5088 100644
--- a/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_57da0b() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_57da0b() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_57da0b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_57da0b() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_57da0b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
index a243d0c..5703d38 100644
--- a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_57e28f() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_57e28f() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_57e28f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_57e28f() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_57e28f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
index 5e4dae7..4705fe6 100644
--- a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_58a515() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_58a515() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_58a515();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_58a515() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_58a515();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
index 04e4107..0867e70 100644
--- a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_5985f3() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_5985f3() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_5985f3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_5985f3() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_5985f3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
index 97f15c8..aa60bfd 100644
--- a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_5caa5e() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_5caa5e() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_5caa5e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_5caa5e() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_5caa5e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
index 0bcace0..c837206 100644
--- a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_5e295d() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_5e295d() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_5e295d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_5e295d() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_5e295d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
index d3ac6cc..3487223 100644
--- a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_60bf54() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_60bf54() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_60bf54();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_60bf54() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_60bf54();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
index 5c5ffdb..d9953ab 100644
--- a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_63f3cf() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_63f3cf() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_63f3cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_63f3cf() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_63f3cf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
index b3d04cc..83013dd 100644
--- a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_68105c() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_68105c() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_68105c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_68105c() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_68105c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
index 619ef60..5fdb83d 100644
--- a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_686ef2() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_686ef2() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_686ef2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_686ef2() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_686ef2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
index bad1827..a837f74 100644
--- a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_6adac6() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_6adac6() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_6adac6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_6adac6() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_6adac6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
index f1c5c1f..d53f89c 100644
--- a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_6ec1b4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_6ec1b4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_6ec1b4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureDimensions_6ec1b4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_6ec1b4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
index 070db6d..9f84fac 100644
--- a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_6f0d79() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_6f0d79() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_6f0d79();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_6f0d79() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_6f0d79();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
index 681147c..dc198d9 100644
--- a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_702c53() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_702c53() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_702c53();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_702c53() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_702c53();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
index aa44ad0..b9d8411 100644
--- a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_72e5d6() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_72e5d6() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_72e5d6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_72e5d6() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_72e5d6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
index c52530f..f149da1 100644
--- a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_79df87() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_79df87() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_79df87();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_79df87() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_79df87();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
index 1d2ab40..a66e815 100644
--- a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_7bf826() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_7bf826() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_7bf826();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_7bf826() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_7bf826();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
index bbba208..253b2b4 100644
--- a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_7f5c2e() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_7f5c2e() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_7f5c2e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_7f5c2e() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_7f5c2e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
index f6be5c0..f9c21ce 100644
--- a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8028f3() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8028f3() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8028f3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8028f3() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8028f3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
index b2c772b..6a6bbb3 100644
--- a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_811679() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_811679() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_811679();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_811679() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_811679();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
index 7836f70..3b765b8 100644
--- a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_820596() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_820596() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_820596();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_820596() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_820596();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
index 22e223d..24adf97 100644
--- a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_83ee5a() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_83ee5a() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_83ee5a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_83ee5a() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_83ee5a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
index 4d6dcae..38697f6 100644
--- a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_85d556() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_85d556() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_85d556();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_85d556() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_85d556();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
index 820ff02..ddf17b0 100644
--- a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_88ad17() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_88ad17() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_88ad17();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_88ad17() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_88ad17();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
index f7b5040..4094696 100644
--- a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_8aa4c4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_8aa4c4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8aa4c4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureDimensions_8aa4c4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8aa4c4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
index 27de4f3..61106bc 100644
--- a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_8deb5e() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_8deb5e() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8deb5e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_8deb5e() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8deb5e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
index f3a64ba..80db1d7 100644
--- a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_8f20bf() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_8f20bf() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_8f20bf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_8f20bf() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_8f20bf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
index f4f61cd..8b89fb8 100644
--- a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8fca0f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8fca0f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_8fca0f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_8fca0f() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_8fca0f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
index 2c5b144..304f830 100644
--- a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_90340b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_90340b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_90340b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_90340b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_90340b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
index 5a8a2b5..d51bdd0 100644
--- a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_9042ab() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_9042ab() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -57,11 +56,11 @@
   textureDimensions_9042ab();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureDimensions_9042ab() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -87,11 +85,11 @@
   textureDimensions_9042ab();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
index 3c4c7c4..2641780 100644
--- a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_9393b0() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_9393b0() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_9393b0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_9393b0() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_9393b0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
index 55587ff..249f885 100644
--- a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_939fdb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_939fdb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_939fdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_939fdb() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_939fdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
index d6d55f8..0df22f8 100644
--- a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_962dcd() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_962dcd() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_962dcd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureDimensions_962dcd() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_962dcd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
index 0b0ea4a..4466a1d 100644
--- a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_9abfe5() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_9abfe5() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_9abfe5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_9abfe5() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_9abfe5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
index e51dea9..90cfd47 100644
--- a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_9c9c57() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_9c9c57() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_9c9c57();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureDimensions_9c9c57() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_9c9c57();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
index ef5dd49..3282b4c 100644
--- a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_9da9e2() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_9da9e2() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_9da9e2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_9da9e2() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_9da9e2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
index 1ef74f4..06452a6 100644
--- a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_9eb8d8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_9eb8d8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_9eb8d8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_9eb8d8() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_9eb8d8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
index 79420da..6af3f44 100644
--- a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_9f8e46() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_9f8e46() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_9f8e46();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_9f8e46() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_9f8e46();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
index df0018f..87c69a8 100644
--- a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_a01845() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_a01845() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_a01845();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureDimensions_a01845() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_a01845();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
index 8eceb21..664e204 100644
--- a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_a7d565() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_a7d565() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_a7d565();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureDimensions_a7d565() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_a7d565();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
index b096907..ff71748 100644
--- a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_a863f2() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_a863f2() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_a863f2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_a863f2() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_a863f2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
index dbd5448..3053742 100644
--- a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_a9c9c1() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_a9c9c1() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_a9c9c1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_a9c9c1() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_a9c9c1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
index 6712c43..ddf7bff 100644
--- a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_b0e16d() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_b0e16d() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_b0e16d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_b0e16d() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_b0e16d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
index 6e65111..27eddda 100644
--- a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_b3c954() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_b3c954() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_b3c954();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureDimensions_b3c954() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_b3c954();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
index eddf418..ee7fbb6 100644
--- a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_b3e407() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_b3e407() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_b3e407();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureDimensions_b3e407() {
   int res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_b3e407();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
index b9b2835..942e900 100644
--- a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_b91240() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_b91240() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_b91240();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_b91240() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_b91240();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
index 2d337f8..b1a73db 100644
--- a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_ba1481() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_ba1481() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_ba1481();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureDimensions_ba1481() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_ba1481();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
index 9be28c7..d53a4f0 100644
--- a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_bb3dde() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_bb3dde() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_bb3dde();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureDimensions_bb3dde() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_bb3dde();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
index c288e25..43dbd13 100644
--- a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_c30e75() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_c30e75() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_c30e75();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureDimensions_c30e75() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_c30e75();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
index cfd945e..a05daa2 100644
--- a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_c7943d() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_c7943d() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_c7943d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureDimensions_c7943d() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_c7943d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
index af1aadb..66c6718 100644
--- a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_cc968c() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_cc968c() {
   int res = imageSize(arg_0_1);
 }
@@ -57,11 +56,11 @@
   textureDimensions_cc968c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureDimensions_cc968c() {
   int res = imageSize(arg_0_1);
 }
@@ -87,11 +85,11 @@
   textureDimensions_cc968c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
index 774aa7a..1023423 100644
--- a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_cccc8f() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_cccc8f() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_cccc8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureDimensions_cccc8f() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_cccc8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
index b46987f..9946cc2 100644
--- a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cd76a7() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cd76a7() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_cd76a7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cd76a7() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_cd76a7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
index d1f95a0..ad02097 100644
--- a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_cdf473() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_cdf473() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_cdf473();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureDimensions_cdf473() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_cdf473();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
index f96f64d..b14fbe8 100644
--- a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_cec841() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_cec841() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_cec841();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureDimensions_cec841() {
   ivec2 res = textureSize(arg_0_1, 0).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_cec841();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
index d6a4eeb..a41c319 100644
--- a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cf7e43() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cf7e43() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_cf7e43();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureDimensions_cf7e43() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_cf7e43();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
index ba73335..9dbf7f4 100644
--- a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_d125bc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_d125bc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_d125bc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureDimensions_d125bc() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_d125bc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
index e527f04..d434b3e 100644
--- a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_d83c45() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_d83c45() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_d83c45();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureDimensions_d83c45() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_d83c45();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
index c2f50a6..73f127b 100644
--- a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureDimensions_daf7c0() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureDimensions_daf7c0() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_daf7c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureDimensions_daf7c0() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_daf7c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
index 2abfd3c..b1f94d9 100644
--- a/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_dc2dd0() {
   int res = imageSize(arg_0_1);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_dc2dd0() {
   int res = imageSize(arg_0_1);
 }
@@ -58,11 +57,11 @@
   textureDimensions_dc2dd0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureDimensions_dc2dd0() {
   int res = imageSize(arg_0_1);
 }
@@ -89,11 +87,11 @@
   textureDimensions_dc2dd0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
index bbd4d76..74761e1 100644
--- a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_e927be() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_e927be() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -57,11 +56,11 @@
   textureDimensions_e927be();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureDimensions_e927be() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -87,11 +85,11 @@
   textureDimensions_e927be();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
index 4677c34..cc5eb73 100644
--- a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_e9e96c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_e9e96c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -48,16 +47,15 @@
   textureDimensions_e9e96c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_e9e96c() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -71,8 +69,8 @@
   textureDimensions_e9e96c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
index 61798af..e9158de 100644
--- a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_ef5b89() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_ef5b89() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_ef5b89();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_ef5b89() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_ef5b89();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
index 06ce068..89b3428 100644
--- a/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_efc8a4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_efc8a4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_efc8a4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureDimensions_efc8a4() {
   ivec3 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_efc8a4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
index 4aa6080..85626e2 100644
--- a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_f60bdb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureDimensions_f60bdb() {
   ivec2 res = textureSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_f60bdb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
index 393b87d..f855aee 100644
--- a/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_f7145b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_f7145b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_f7145b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureDimensions_f7145b() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_f7145b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
index 7f6d8ed..25889f5 100644
--- a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_f931c7() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_f931c7() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_f931c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureDimensions_f931c7() {
   ivec2 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_f931c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
index ff7510b..853f710 100644
--- a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_fa9859() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_fa9859() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -48,16 +47,15 @@
   textureDimensions_fa9859();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureDimensions_fa9859() {
   ivec2 res = textureSize(arg_0_1, 0);
 }
@@ -71,8 +69,8 @@
   textureDimensions_fa9859();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
index 0a351e6..a8498fe 100644
--- a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_fb5670() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_fb5670() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -57,11 +56,11 @@
   textureDimensions_fb5670();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureDimensions_fb5670() {
   ivec2 res = imageSize(arg_0_1).xy;
 }
@@ -87,11 +85,11 @@
   textureDimensions_fb5670();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
index 9173c69..56f7a39 100644
--- a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_fcac78() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_fcac78() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -48,16 +47,15 @@
   textureDimensions_fcac78();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureDimensions_fcac78() {
   ivec3 res = imageSize(arg_0_1);
 }
@@ -71,8 +69,8 @@
   textureDimensions_fcac78();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl
index 23f98df..9c485b2 100644
--- a/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/01305f.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_01305f() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_01305f() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_01305f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_01305f() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_01305f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl
index 960aef7..6c84a46 100644
--- a/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/06030a.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_06030a() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_06030a() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_06030a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_06030a() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_06030a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl
index 2eeb693..073e19e 100644
--- a/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/10c554.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGather_10c554() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGather_10c554() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureGather_10c554();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGather_10c554() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureGather_10c554();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl
index 688ba1e..dea7b69 100644
--- a/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/15d79c.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_15d79c() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_15d79c() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_15d79c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_15d79c() {
   vec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_15d79c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl
index 8eb5532..ed998ff 100644
--- a/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/2e0ed5.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_2e0ed5() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_2e0ed5() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureGather_2e0ed5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_2e0ed5() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureGather_2e0ed5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl
index 685d4e1..ffbb04b 100644
--- a/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/3112e8.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3112e8() {
   vec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3112e8() {
   vec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -59,11 +58,11 @@
   textureGather_3112e8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3112e8() {
   vec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -90,11 +88,11 @@
   textureGather_3112e8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl
index 86c4e69..ea10f93 100644
--- a/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/3c527e.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp usamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3c527e() {
   uvec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp usamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3c527e() {
   uvec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -59,11 +58,11 @@
   textureGather_3c527e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp usamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_3c527e() {
   uvec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -90,11 +88,11 @@
   textureGather_3c527e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl
index 52d72ac..c770aa5 100644
--- a/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/43025d.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGather_43025d() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGather_43025d() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -59,11 +58,11 @@
   textureGather_43025d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGather_43025d() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -90,11 +88,11 @@
   textureGather_43025d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl
index ce12d8e..c5f4ab3 100644
--- a/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/4f2350.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_4f2350() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_4f2350() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_4f2350();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_4f2350() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_4f2350();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl
index b3cea06..b5cd131 100644
--- a/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/51cf0b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_51cf0b() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_51cf0b() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_51cf0b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_1_arg_2;
 
-
 void textureGather_51cf0b() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_51cf0b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl
index aee3538..2d6eb3a 100644
--- a/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/53ece6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_53ece6() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_53ece6() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureGather_53ece6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_53ece6() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureGather_53ece6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl
index 263ea24..0b79d64 100644
--- a/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/57bfc6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_1_arg_2;
 
-
 void textureGather_57bfc6() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_1_arg_2;
 
-
 void textureGather_57bfc6() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_57bfc6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_1_arg_2;
 
-
 void textureGather_57bfc6() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_57bfc6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl
index b78777d..369cafb 100644
--- a/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/587ba3.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_587ba3() {
   ivec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_587ba3() {
   ivec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_587ba3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_587ba3() {
   ivec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_587ba3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl
index f8cbb0f..e862fd5 100644
--- a/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/69e0fb.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_69e0fb() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_69e0fb() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_69e0fb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_1_arg_2;
 
-
 void textureGather_69e0fb() {
   ivec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_69e0fb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl
index 7c39728..57c6303 100644
--- a/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/93003d.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_93003d() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_93003d() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_93003d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_93003d() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec2(0.0f, 0.0f), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_93003d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl
index d0355b6..e872aa3 100644
--- a/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/9a6358.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_9a6358() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_9a6358() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -50,17 +49,16 @@
   textureGather_9a6358();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGather_9a6358() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -74,8 +72,8 @@
   textureGather_9a6358();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl
index 94e82de..614bd67 100644
--- a/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/9efca2.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_9efca2() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_9efca2() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_9efca2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_1_arg_2;
 
-
 void textureGather_9efca2() {
   vec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_9efca2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl
index 9069aed..97371b6 100644
--- a/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/bd0b1e.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_bd0b1e() {
   vec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_bd0b1e() {
   vec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_bd0b1e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_1_arg_2;
 
-
 void textureGather_bd0b1e() {
   vec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_bd0b1e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl
index bffbce1..1f317e7 100644
--- a/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/c409ae.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_c409ae() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_c409ae() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureGather_c409ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGather_c409ae() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureGather_c409ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl
index e099dcf..8ab7901 100644
--- a/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/c55822.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp isamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_c55822() {
   ivec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp isamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_c55822() {
   ivec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -59,11 +58,11 @@
   textureGather_c55822();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp isamplerCubeArray arg_1_arg_2;
 
-
 void textureGather_c55822() {
   ivec4 res = textureGather(arg_1_arg_2, vec4(0.0f, 0.0f, 0.0f, float(1)), 1);
 }
@@ -90,11 +88,11 @@
   textureGather_c55822();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl
index 7f2323e..0f00339 100644
--- a/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/e1b67d.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usamplerCube arg_1_arg_2;
 
-
 void textureGather_e1b67d() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_1_arg_2;
 
-
 void textureGather_e1b67d() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_e1b67d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usamplerCube arg_1_arg_2;
 
-
 void textureGather_e1b67d() {
   uvec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_e1b67d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl
index 44ff16a..015e775 100644
--- a/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/e9eff6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_e9eff6() {
   uvec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_e9eff6() {
   uvec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_e9eff6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_1_arg_2;
 
-
 void textureGather_e9eff6() {
   uvec4 res = textureGather(arg_1_arg_2, vec2(0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_e9eff6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl
index 2549939..e0ab81c 100644
--- a/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/f5f3ba.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_f5f3ba() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_f5f3ba() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_f5f3ba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_1_arg_2;
 
-
 void textureGather_f5f3ba() {
   uvec4 res = textureGatherOffset(arg_1_arg_2, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_f5f3ba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl b/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl
index 2a173d6..9d745f2 100644
--- a/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGather/f7995a.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp isamplerCube arg_1_arg_2;
 
-
 void textureGather_f7995a() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_1_arg_2;
 
-
 void textureGather_f7995a() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -50,17 +49,16 @@
   textureGather_f7995a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isamplerCube arg_1_arg_2;
 
-
 void textureGather_f7995a() {
   ivec4 res = textureGather(arg_1_arg_2, vec3(0.0f, 0.0f, 0.0f), 1);
 }
@@ -74,8 +72,8 @@
   textureGather_f7995a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl
index b4282df..c76101c 100644
--- a/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/182fd4.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGatherCompare_182fd4() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGatherCompare_182fd4() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_182fd4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureGatherCompare_182fd4() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_182fd4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl
index ff0a64b..94a4141 100644
--- a/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/60d2d1.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGatherCompare_60d2d1() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGatherCompare_60d2d1() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,11 +58,11 @@
   textureGatherCompare_60d2d1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureGatherCompare_60d2d1() {
   vec4 res = textureGather(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,11 +88,11 @@
   textureGatherCompare_60d2d1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl
index e408d49..2694554 100644
--- a/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/6d9352.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_6d9352() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_6d9352() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_6d9352();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_6d9352() {
   vec4 res = textureGather(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_6d9352();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl
index 58dd62c..df3b334 100644
--- a/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/6f1267.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_6f1267() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_6f1267() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_6f1267();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_6f1267() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_6f1267();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl
index 5a93080..904a0a5 100644
--- a/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/783e65.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_783e65() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_783e65() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_783e65();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureGatherCompare_783e65() {
   vec4 res = textureGather(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_783e65();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGather' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGather' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl
index f535ee0..0c1fcc2 100644
--- a/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureGatherCompare/a5f587.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_a5f587() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,11 +34,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -47,7 +47,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_a5f587() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -60,15 +59,15 @@
   textureGatherCompare_a5f587();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -78,7 +77,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureGatherCompare_a5f587() {
   vec4 res = textureGatherOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -92,15 +90,15 @@
   textureGatherCompare_a5f587();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
index b4e2da9..5412f67 100644
--- a/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_19cf87() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 0).x;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_19cf87() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 0).x;
 }
@@ -48,16 +47,15 @@
   textureLoad_19cf87();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_19cf87() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 0).x;
 }
@@ -71,8 +69,8 @@
   textureLoad_19cf87();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
index 60fca1f..fb511ee9 100644
--- a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureLoad_1b8588() {
   uvec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureLoad_1b8588() {
   uvec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -57,11 +56,11 @@
   textureLoad_1b8588();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureLoad_1b8588() {
   uvec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -87,11 +85,11 @@
   textureLoad_1b8588();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
index 98ac52a..73e9fa2 100644
--- a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureLoad_1f2016() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureLoad_1f2016() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_1f2016();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureLoad_1f2016() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_1f2016();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
index b316707..9682ec0 100644
--- a/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_484344() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_484344() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_484344();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_484344() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_484344();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
index 9466096..5dd74b9 100644
--- a/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureLoad_4fd803() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureLoad_4fd803() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_4fd803();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureLoad_4fd803() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_4fd803();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
index ac08abf..e3c138f 100644
--- a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureLoad_5a2f9d() {
   ivec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureLoad_5a2f9d() {
   ivec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -57,11 +56,11 @@
   textureLoad_5a2f9d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureLoad_5a2f9d() {
   ivec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -87,11 +85,11 @@
   textureLoad_5a2f9d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
index 8964b6c..3470f27 100644
--- a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureLoad_6154d4() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureLoad_6154d4() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_6154d4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureLoad_6154d4() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_6154d4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
index f7e9072..527ff52 100644
--- a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 1).x;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 1).x;
 }
@@ -48,16 +47,15 @@
   textureLoad_6273b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_6273b1() {
   float res = texelFetch(arg_0_1, ivec2(0, 0), 1).x;
 }
@@ -71,8 +69,8 @@
   textureLoad_6273b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
index 7452a9c..35d4409 100644
--- a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureLoad_79e697() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureLoad_79e697() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_79e697();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureLoad_79e697() {
   ivec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_79e697();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
index 2f360e6..87cab79 100644
--- a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureLoad_7c90e5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureLoad_7c90e5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_7c90e5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureLoad_7c90e5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_7c90e5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
index 49fbabd..0ae7c91 100644
--- a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureLoad_81c381() {
   vec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureLoad_81c381() {
   vec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -57,11 +56,11 @@
   textureLoad_81c381();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureLoad_81c381() {
   vec4 res = texelFetch(arg_0_1, 1, 0);
 }
@@ -87,11 +85,11 @@
   textureLoad_81c381();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
index 65df325..6240bc6 100644
--- a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_87be85() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_87be85() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_87be85();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_87be85() {
   vec4 res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_87be85();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
index ecb0930..fc14c7a 100644
--- a/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_8acf41() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_8acf41() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_8acf41();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureLoad_8acf41() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_8acf41();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
index fae43f3..78ec7ba 100644
--- a/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_9b2667() {
   float res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0).x;
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_9b2667() {
   float res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0).x;
 }
@@ -48,16 +47,15 @@
   textureLoad_9b2667();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureLoad_9b2667() {
   float res = texelFetch(arg_0_1, ivec3(0, 0, 1), 0).x;
 }
@@ -71,8 +69,8 @@
   textureLoad_9b2667();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
index 215da7e..bc1f029 100644
--- a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_a583c9() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_a583c9() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -48,16 +47,15 @@
   textureLoad_a583c9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureLoad_a583c9() {
   vec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -71,8 +69,8 @@
   textureLoad_a583c9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
index 4553ca8..40ac768 100644
--- a/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureLoad_a9a9f5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureLoad_a9a9f5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_a9a9f5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureLoad_a9a9f5() {
   uvec4 res = texelFetch(arg_0_1, ivec3(0, 0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_a9a9f5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
index 3a871ed..2425099 100644
--- a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureLoad_c2a480() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureLoad_c2a480() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -48,16 +47,15 @@
   textureLoad_c2a480();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureLoad_c2a480() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 0);
 }
@@ -71,8 +69,8 @@
   textureLoad_c2a480();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
index 83deeea..a5fbbe2 100644
--- a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureLoad_c378ee() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureLoad_c378ee() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -48,16 +47,15 @@
   textureLoad_c378ee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureLoad_c378ee() {
   uvec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -71,8 +69,8 @@
   textureLoad_c378ee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
index fabf333..9aafc24 100644
--- a/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureLoad_e3d2cc() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureLoad_e3d2cc() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -48,16 +47,15 @@
   textureLoad_e3d2cc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureLoad_e3d2cc() {
   ivec4 res = texelFetch(arg_0_1, ivec2(0, 0), 1);
 }
@@ -71,8 +69,8 @@
   textureLoad_e3d2cc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
index 7ac4790..f67b0d8 100644
--- a/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_024820() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_024820() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_024820();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_024820() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_024820();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
index 2a991e3..1433d32 100644
--- a/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLayers_053df7() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLayers_053df7() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_053df7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLayers_053df7() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_053df7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
index 29bd7cf..8120d25 100644
--- a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_058cc3() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_058cc3() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_058cc3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_058cc3() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_058cc3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
index 656c305..85d6768e 100644
--- a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_09d05d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_09d05d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_09d05d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_09d05d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_09d05d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
index a0e8e7a..0c9751a 100644
--- a/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_13b4ce() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_13b4ce() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_13b4ce();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_13b4ce() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_13b4ce();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
index f29f856..71288c5 100644
--- a/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_22e53b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_22e53b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_22e53b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_22e53b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_22e53b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
index 7287b21..edd3653 100644
--- a/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_562013() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_562013() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_562013();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_562013() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_562013();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
index 7a082d8..6cb0d2d 100644
--- a/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_5d59cd() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_5d59cd() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_5d59cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_5d59cd() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_5d59cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
index 7e4ab5a..2c22d99 100644
--- a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_68a65b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_68a65b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_68a65b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_68a65b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_68a65b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
index 0a9915d..2dc89f1 100644
--- a/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_778bd1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_778bd1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_778bd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLayers_778bd1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_778bd1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
index c7b6605..7951783 100644
--- a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_7f1937() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_7f1937() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_7f1937();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_7f1937() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_7f1937();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
index c7975e6..00b6c8d 100644
--- a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLayers_85f980() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLayers_85f980() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_85f980();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLayers_85f980() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_85f980();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
index 90a5609..835800a 100644
--- a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLayers_87953e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLayers_87953e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_87953e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLayers_87953e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_87953e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
index f200d42..9fa11ee 100644
--- a/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLayers_893e7c() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLayers_893e7c() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_893e7c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLayers_893e7c() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_893e7c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
index 7233f2f..ae57eb4 100644
--- a/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_9700fb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_9700fb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_9700fb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_9700fb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_9700fb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
index 4c6bf3f..875fca0 100644
--- a/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_a216d2() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_a216d2() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_a216d2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_a216d2() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_a216d2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
index 69bf230..451e755 100644
--- a/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_cd5dc8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_cd5dc8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_cd5dc8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_cd5dc8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_cd5dc8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
index a28de70..ab739fc 100644
--- a/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_d5b228() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_d5b228() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_d5b228();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_d5b228() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_d5b228();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
index dd53e42..2b8859d 100644
--- a/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_e31be1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_e31be1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_e31be1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureNumLayers_e31be1() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_e31be1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
index 003cf83..007b6ac 100644
--- a/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_e653c0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_e653c0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_e653c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLayers_e653c0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_e653c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
index 259f4f6..ab9eb50 100644
--- a/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ee942f() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ee942f() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_ee942f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ee942f() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_ee942f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
index 5fae35e..3a29646 100644
--- a/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_f33005() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_f33005() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_f33005();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureNumLayers_f33005() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_f33005();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
index 6114dc7..60679ad 100644
--- a/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_fcec98() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_fcec98() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLayers_fcec98();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_fcec98() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLayers_fcec98();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
index 264efcb..f662bf5 100644
--- a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ff5e89() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ff5e89() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLayers_ff5e89();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureNumLayers_ff5e89() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLayers_ff5e89();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
index ebffe19..8af1de3 100644
--- a/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_076cb5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_076cb5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_076cb5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_076cb5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_076cb5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
index f34065a..f5ea75b 100644
--- a/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureNumLevels_080d95() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureNumLevels_080d95() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_080d95();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isamplerCube arg_0_1;
-
 void textureNumLevels_080d95() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_080d95();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
index 0c66620..f014bea 100644
--- a/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureNumLevels_09ddd0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureNumLevels_09ddd0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_09ddd0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2D arg_0_1;
-
 void textureNumLevels_09ddd0() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_09ddd0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
index fc1eb9c..b88b1be 100644
--- a/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_105988() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_105988() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_105988();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_105988() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_105988();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
index 3480f63..7c231ca 100644
--- a/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureNumLevels_1e6f3b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureNumLevels_1e6f3b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_1e6f3b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usampler1D arg_0_1;
-
 void textureNumLevels_1e6f3b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_1e6f3b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
index 08f4588..8c20d6e 100644
--- a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureNumLevels_23f750() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureNumLevels_23f750() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_23f750();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2D arg_0_1;
-
 void textureNumLevels_23f750() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_23f750();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
index 7e37a9e..b1131a0 100644
--- a/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_2c3575() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_2c3575() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_2c3575();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_2c3575() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_2c3575();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
index f430b8a..ddc4063 100644
--- a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureNumLevels_32a0ae() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureNumLevels_32a0ae() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_32a0ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isampler1D arg_0_1;
-
 void textureNumLevels_32a0ae() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_32a0ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
index 0177cb0..fcc74f7 100644
--- a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLevels_5101cf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLevels_5101cf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_5101cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2DArray arg_0_1;
-
 void textureNumLevels_5101cf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_5101cf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
index b7da5d4..11b5d55 100644
--- a/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureNumLevels_51b5bb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureNumLevels_51b5bb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_51b5bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp sampler1D arg_0_1;
-
 void textureNumLevels_51b5bb() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_51b5bb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
index 5827c9b..ace3b6d 100644
--- a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_897aaf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_897aaf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_897aaf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp samplerCube arg_0_1;
-
 void textureNumLevels_897aaf() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_897aaf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
index aafada5..8fcea69 100644
--- a/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureNumLevels_9da7a5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureNumLevels_9da7a5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_9da7a5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler3D arg_0_1;
-
 void textureNumLevels_9da7a5() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_9da7a5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
index 1c5cc0c..8c92d9a 100644
--- a/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLevels_a91c03() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLevels_a91c03() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_a91c03();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp isamplerCubeArray arg_0_1;
-
 void textureNumLevels_a91c03() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_a91c03();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
index 0b190ab..00c6865 100644
--- a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_aee7c8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_aee7c8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_aee7c8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp samplerCubeArray arg_0_1;
-
 void textureNumLevels_aee7c8() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_aee7c8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
index 8c7223c..9516878 100644
--- a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_b1b12b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_b1b12b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_b1b12b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_b1b12b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_b1b12b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
index cd0d70f..d103725 100644
--- a/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureNumLevels_b4f5ea() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureNumLevels_b4f5ea() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_b4f5ea();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler3D arg_0_1;
-
 void textureNumLevels_b4f5ea() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_b4f5ea();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
index 30de2c6..aa22cc7 100644
--- a/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLevels_d004a9() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLevels_d004a9() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_d004a9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2DArray arg_0_1;
-
 void textureNumLevels_d004a9() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_d004a9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
index 9868029..565b95f 100644
--- a/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureNumLevels_dca09e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureNumLevels_dca09e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_dca09e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler3D arg_0_1;
-
 void textureNumLevels_dca09e() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_dca09e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
index 44e6b39..c955cb2 100644
--- a/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_e67231() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_e67231() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_e67231();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2D arg_0_1;
-
 void textureNumLevels_e67231() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_e67231();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
index eb232ea..77747c5 100644
--- a/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureNumLevels_ed078b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureNumLevels_ed078b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_ed078b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usamplerCube arg_0_1;
-
 void textureNumLevels_ed078b() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_ed078b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
index 4636ea7..9d7d150 100644
--- a/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLevels_f46ec6() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLevels_f46ec6() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -57,11 +56,11 @@
   textureNumLevels_f46ec6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 uniform highp usamplerCubeArray arg_0_1;
-
 void textureNumLevels_f46ec6() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -87,11 +85,11 @@
   textureNumLevels_f46ec6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
index c808844..3924bda 100644
--- a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_f5828d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_f5828d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumLevels_f5828d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_1;
-
 void textureNumLevels_f5828d() {
   int res = textureQueryLevels(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumLevels_f5828d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureQueryLevels' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureQueryLevels' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
index 2679239..81de2d0 100644
--- a/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_2c6f14() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_2c6f14() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_2c6f14();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_2c6f14() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_2c6f14();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
index 4edac8a..bb0a17a 100644
--- a/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureNumSamples_42f8bb() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureNumSamples_42f8bb() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_42f8bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp usampler2DMS arg_0_1;
-
 void textureNumSamples_42f8bb() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_42f8bb();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
index 2a6a32a..98c556a 100644
--- a/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureNumSamples_449d23() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureNumSamples_449d23() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_449d23();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp isampler2DMS arg_0_1;
-
 void textureNumSamples_449d23() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_449d23();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
index 3ac2707..1e01150 100644
--- a/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = textureSamples(arg_0_1);;
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,11 +33,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = textureSamples(arg_0_1);;
 }
@@ -58,15 +57,15 @@
   textureNumSamples_a3c8a0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 uniform highp sampler2DMS arg_0_1;
-
 void textureNumSamples_a3c8a0() {
   int res = textureSamples(arg_0_1);;
 }
@@ -89,15 +87,15 @@
   textureNumSamples_a3c8a0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:7: 'textureSamples' : no matching overloaded function found 
-ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp int'
-ERROR: 0:7: '' : compilation terminated 
+ERROR: 0:6: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:6: '' : compilation terminated 
 ERROR: 3 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
index 3be69b9..77a763e 100644
--- a/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_02aa9b() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
 }
@@ -12,8 +11,8 @@
   textureSample_02aa9b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
index 1215f7d..cf23155 100644
--- a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSample_100dc0() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -12,8 +11,8 @@
   textureSample_100dc0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
index e2a25d5..4541476 100644
--- a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_38bbb9() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_38bbb9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
index d41bb79..04c2dab 100644
--- a/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSample_3b50bd() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -12,8 +11,8 @@
   textureSample_3b50bd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
index 9ef770e..0c0a8bb 100644
--- a/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSample_4dd1bf() {
   vec4 res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)));
 }
@@ -14,11 +13,11 @@
   textureSample_4dd1bf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
index f55a6ad..fa29227 100644
--- a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_51b514() {
   vec4 res = texture(arg_0_arg_1, vec2(0.0f, 0.0f));
 }
@@ -12,8 +11,8 @@
   textureSample_51b514();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
index 8e0be0b..def5be6 100644
--- a/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_667d76() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_667d76();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
index 06284d4..6189a03 100644
--- a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_6717ca() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)));
 }
@@ -12,8 +11,8 @@
   textureSample_6717ca();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
index 0c8a04b..1bf2893 100644
--- a/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler1D arg_0_arg_1;
 
-
 void textureSample_6e64fb() {
   vec4 res = texture(arg_0_arg_1, 1.0f);
 }
@@ -14,11 +13,11 @@
   textureSample_6e64fb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'sampler1D' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
index 78556ad..4058d9b 100644
--- a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSample_7c3baa() {
   vec4 res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -12,8 +11,8 @@
   textureSample_7c3baa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
index e2e2ddd..ebd7720 100644
--- a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_7e9ffd() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1))).x;
 }
@@ -12,8 +11,8 @@
   textureSample_7e9ffd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
index 116b359..68f3566 100644
--- a/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSample_8522e7() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_8522e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
index 76d4a08..54e6cbd 100644
--- a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSample_c2f4e8() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1))).x;
 }
@@ -14,11 +13,11 @@
   textureSample_c2f4e8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
index acb4c23..c014268 100644
--- a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSample_e53267() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f));
 }
@@ -12,8 +11,8 @@
   textureSample_e53267();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
index 8f10fda..8006955 100644
--- a/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSample_ea7030() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f)).x;
 }
@@ -12,8 +11,8 @@
   textureSample_ea7030();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
index 326544d..fb0329d 100644
--- a/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleBias_53b9f7() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_53b9f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
index 923d6d0..1091395 100644
--- a/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleBias_65ac50() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_65ac50();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
index 8963a2b..d920205 100644
--- a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleBias_6a9113() {
   vec4 res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_6a9113();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
index 0a16afa..1d24e97 100644
--- a/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleBias_80e579() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_80e579();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
index 7acf4f6..eceb366 100644
--- a/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleBias_81c19a() {
   vec4 res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), ivec2(0, 0), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_81c19a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
index 1707cd8..84c7017 100644
--- a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleBias_d3fa1b() {
   vec4 res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_d3fa1b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
index c643170..478b320 100644
--- a/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleBias_df91bb() {
   vec4 res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0), 1.0f);
 }
@@ -12,8 +11,8 @@
   textureSampleBias_df91bb();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
index ab89f32..086831e 100644
--- a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleBias_eed7c4() {
   vec4 res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -14,11 +13,11 @@
   textureSampleBias_eed7c4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
index 7d60a48..1231a76 100644
--- a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompare_25fcd1() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_25fcd1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
index 3afff8b..7c2b7a6 100644
--- a/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompare_3a5923() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_3a5923();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
index 49d1c57..66c6f93 100644
--- a/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompare_63fb83() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_63fb83();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
index feff3b4..c0ae874 100644
--- a/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompare_98b85c() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_98b85c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
index 924fac9..c7d428c 100644
--- a/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompare_a3ca7e() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -14,11 +13,11 @@
   textureSampleCompare_a3ca7e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
index 2642223..8c04e11 100644
--- a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompare_dd431d() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -14,14 +13,14 @@
   textureSampleCompare_dd431d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
index fa864b0..7f8280e 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_011a8f() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_011a8f() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_011a8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_011a8f() {
   float res = textureOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_011a8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
index e9e93c1..a994097 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1116ed() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'texture' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'texture' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1116ed() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_1116ed();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1116ed() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_1116ed();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
index e4784a2..5ec997d 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1568e3() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'texture' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'texture' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1568e3() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_1568e3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleCompareLevel_1568e3() {
   float res = texture(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_1568e3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
index 7a934c1..b3a2099 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_2ad2b1() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'texture' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'texture' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_2ad2b1() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_2ad2b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_2ad2b1() {
   float res = texture(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_2ad2b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: '=' :  cannot convert from ' global highp 4-component vector of float' to ' temp mediump float'
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
index 6f116fe..bdbfe50 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_4cf3a2() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_4cf3a2() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,11 +58,11 @@
   textureSampleCompareLevel_4cf3a2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleCompareLevel_4cf3a2() {
   float res = texture(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,11 +88,11 @@
   textureSampleCompareLevel_4cf3a2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
index 40a07de..da1ac6c 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_f8121c() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_f8121c() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -59,14 +58,14 @@
   textureSampleCompareLevel_f8121c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleCompareLevel_f8121c() {
   float res = textureOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -90,14 +88,14 @@
   textureSampleCompareLevel_f8121c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
index dd3d506..7b9b193 100644
--- a/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_21402b() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_21402b() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_21402b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_21402b() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_21402b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
index a29e182..3a47f0d 100644
--- a/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_2ecd8f() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_2ecd8f() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_2ecd8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_2ecd8f() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_2ecd8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
index 93a50fe..107a45f 100644
--- a/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_468f88() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_468f88() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_468f88();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_468f88() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_468f88();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
index 139e8a1..bfed096 100644
--- a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_521263() {
   vec4 res = textureGrad(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_521263() {
   vec4 res = textureGrad(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_521263();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleGrad_521263() {
   vec4 res = textureGrad(arg_0_arg_1, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_521263();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
index c8bf7a0..c740f15 100644
--- a/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleGrad_5312f4() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleGrad_5312f4() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_5312f4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleGrad_5312f4() {
   vec4 res = textureGrad(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_5312f4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
index 50eb21e..b8527be 100644
--- a/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_872f00() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_872f00() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_872f00();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleGrad_872f00() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_872f00();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
index 0053fca..331edfe 100644
--- a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleGrad_e383db() {
   vec4 res = textureGrad(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleGrad_e383db() {
   vec4 res = textureGrad(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -59,11 +58,11 @@
   textureSampleGrad_e383db();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleGrad_e383db() {
   vec4 res = textureGrad(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
 }
@@ -90,11 +88,11 @@
   textureSampleGrad_e383db();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
index fb59338..ef27adf 100644
--- a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_e9a2f7() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_e9a2f7() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleGrad_e9a2f7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleGrad_e9a2f7() {
   vec4 res = textureGradOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleGrad_e9a2f7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
index 3eca5d3..cb419ca 100644
--- a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_02be59() {
   float res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_02be59() {
   float res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_02be59();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_02be59() {
   float res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_02be59();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
index ba6f146..dbc1453 100644
--- a/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_0bdd9a() {
   vec4 res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_0bdd9a() {
   vec4 res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -59,11 +58,11 @@
   textureSampleLevel_0bdd9a();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_0bdd9a() {
   vec4 res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -90,11 +88,11 @@
   textureSampleLevel_0bdd9a();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
index 888e5c0..7722303 100644
--- a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_1b0291() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_1b0291() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 0).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_1b0291();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_1b0291() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 0).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_1b0291();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
index b04ff20..c383326 100644
--- a/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_1bf73e() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_1bf73e() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_1bf73e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_1bf73e() {
   float res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_1bf73e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLod' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLod' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
index 7f799d2..394a15c 100644
--- a/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_302be4() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_302be4() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_302be4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_302be4() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_302be4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
index 5df230a..50c9e1e 100644
--- a/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_47daa4() {
   float res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_47daa4() {
   float res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_47daa4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_47daa4() {
   float res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_47daa4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
index 2e13b34..7bff4d0 100644
--- a/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_690d95() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_690d95() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_690d95();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_690d95() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_690d95();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
index 6e452b8..2484ec5 100644
--- a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_979816() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_979816() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_979816();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_979816() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 0.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_979816();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
index c46fd86..e660e98 100644
--- a/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_9bd37b() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_9bd37b() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_9bd37b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_9bd37b() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_9bd37b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
index df5321c..2a2dadc 100644
--- a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_a4af26() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_a4af26() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_a4af26();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_a4af26() {
   vec4 res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_a4af26();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
index 89cb1f2..2c839e5 100644
--- a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_abfcc0() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_abfcc0() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_abfcc0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler3D arg_0_arg_1;
 
-
 void textureSampleLevel_abfcc0() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_abfcc0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
index d4ae3fe..f6c7b8a 100644
--- a/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_ae5e39() {
   float res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,7 +34,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -46,7 +46,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_ae5e39() {
   float res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
 }
@@ -59,11 +58,11 @@
   textureSampleLevel_ae5e39();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
@@ -76,7 +75,6 @@
 
 uniform highp samplerCubeArray arg_0_arg_1;
 
-
 void textureSampleLevel_ae5e39() {
   float res = textureLod(arg_0_arg_1, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
 }
@@ -90,11 +88,11 @@
   textureSampleLevel_ae5e39();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
index ed6448c..cfdb547 100644
--- a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
@@ -5,7 +5,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_ba93b3() {
   float res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
 }
@@ -25,6 +24,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -33,10 +34,9 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -46,7 +46,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_ba93b3() {
   float res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
 }
@@ -59,14 +58,14 @@
   textureSampleLevel_ba93b3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -76,7 +75,6 @@
 
 uniform highp sampler2DArray arg_0_arg_1;
 
-
 void textureSampleLevel_ba93b3() {
   float res = textureLodOffset(arg_0_arg_1, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
 }
@@ -90,14 +88,14 @@
   textureSampleLevel_ba93b3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
-ERROR: 0:8: 'textureLodOffset' : no matching overloaded function found 
-ERROR: 0:8: '' : compilation terminated 
+ERROR: 0:7: 'textureLodOffset' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
 ERROR: 2 compilation errors.  No code generated.
 
 
diff --git a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
index f65d6f6..97a3f72 100644
--- a/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_c32df7() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_c32df7() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_c32df7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp samplerCube arg_0_arg_1;
 
-
 void textureSampleLevel_c32df7() {
   vec4 res = textureLod(arg_0_arg_1, vec3(0.0f, 0.0f, 0.0f), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_c32df7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
index ddb00ef..c4375e5 100644
--- a/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
@@ -3,7 +3,6 @@
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_c6aca6() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -23,6 +22,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -31,13 +32,11 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_c6aca6() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -50,17 +49,16 @@
   textureSampleLevel_c6aca6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 uniform highp sampler2D arg_0_arg_1;
 
-
 void textureSampleLevel_c6aca6() {
   vec4 res = textureLod(arg_0_arg_1, vec2(0.0f, 0.0f), 1.0f);
 }
@@ -74,8 +72,8 @@
   textureSampleLevel_c6aca6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
index 93076e8..37a91f0 100644
--- a/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_05ce15() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_05ce15() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_05ce15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_05ce15() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_05ce15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
index af34f02..19110db 100644
--- a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_064c7f() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_064c7f() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_064c7f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_064c7f() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_064c7f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
index 97a4082..85d4b9f 100644
--- a/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_068641() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_068641() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_068641();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_068641() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_068641();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
index d49a59a..e127986 100644
--- a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_0af6b5() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_0af6b5() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_0af6b5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_0af6b5() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_0af6b5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
index 1c04a33..cdd5c97 100644
--- a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_0c3dff() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_0c3dff() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_0c3dff();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_0c3dff() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_0c3dff();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
index 23bcd0b..f893594 100644
--- a/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_102722() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_102722() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_102722();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_102722() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_102722();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
index dcca2574..231d6ff 100644
--- a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_1bbd08() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_1bbd08() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_1bbd08();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_1bbd08() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_1bbd08();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
index 3661048..906d185 100644
--- a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_1c02e7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_1c02e7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_1c02e7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_1c02e7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_1c02e7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
index d6b90eb..6de31ca 100644
--- a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_22d955() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_22d955() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_22d955();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_22d955() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_22d955();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
index efe7756..9398a7e 100644
--- a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_26bf70() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_26bf70() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_26bf70();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_26bf70() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_26bf70();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
index 17f4bc9..9c2d7ff 100644
--- a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_2796b4() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_2796b4() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_2796b4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_2796b4() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_2796b4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
index 8e2b8c4..4b15eaa 100644
--- a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ac6c7() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ac6c7() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_2ac6c7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ac6c7() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_2ac6c7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
index 6e8f226..de17a70 100644
--- a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_2eb2a4() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_2eb2a4() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_2eb2a4();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_2eb2a4() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_2eb2a4();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
index 6403f80..6c5f37e 100644
--- a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ed2a3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ed2a3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_2ed2a3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_2ed2a3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_2ed2a3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
index 4defeef..cc698dc 100644
--- a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_31745b() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_31745b() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_31745b();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_31745b() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_31745b();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
index 0271e9c..226f284 100644
--- a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_32f368() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_32f368() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_32f368();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_32f368() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_32f368();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
index 0803632..0a51372 100644
--- a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_331aee() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_331aee() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_331aee();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_331aee() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_331aee();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
index 8b8affc..2a5a1be 100644
--- a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_38e8d7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_38e8d7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_38e8d7();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_38e8d7() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_38e8d7();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
index c89eb91..9534df4 100644
--- a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_3a52ac() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_3a52ac() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_3a52ac();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_3a52ac() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_3a52ac();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
index 8f114f9..6dccb92 100644
--- a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_3bb7a1() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_3bb7a1() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_3bb7a1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_3bb7a1() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_3bb7a1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
index 1cb628c..dc7578c 100644
--- a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_3bec15() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_3bec15() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_3bec15();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_3bec15() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_3bec15();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
index a8dff3e..4051914 100644
--- a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_441ba8() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_441ba8() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_441ba8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_441ba8() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_441ba8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
index 0359847..848ecfb 100644
--- a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_4fc057() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_4fc057() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_4fc057();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_4fc057() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_4fc057();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
index edaf329..7c355c2 100644
--- a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_5a2f8f() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_5a2f8f() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_5a2f8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_5a2f8f() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_5a2f8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
index 8990d5e..2f11b81 100644
--- a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_60975f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_60975f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_60975f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_60975f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_60975f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
index 15e66fc..05c42da 100644
--- a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_682fd6() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_682fd6() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_682fd6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_682fd6() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_682fd6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
index 668e90c..40e7774 100644
--- a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_6b75c3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_6b75c3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_6b75c3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_6b75c3() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_6b75c3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
index 0993568..648d740 100644
--- a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_6b80d2() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_6b80d2() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_6b80d2();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_6b80d2() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_6b80d2();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
index 95cd722..e42d2a7 100644
--- a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_6cff2e() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_6cff2e() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_6cff2e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_6cff2e() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_6cff2e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
index 1946796..40998d2 100644
--- a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_6da692() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_6da692() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_6da692();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_6da692() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_6da692();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
index e528e3f..85c9f9f 100644
--- a/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_731349() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_731349() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_731349();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_731349() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_731349();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
index 69c93ef..b752f92 100644
--- a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_752da6() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_752da6() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_752da6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_752da6() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_752da6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
index eecdcaa..90de71e 100644
--- a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_77c0ae() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_77c0ae() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_77c0ae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage2D arg_0_1;
-
 void textureStore_77c0ae() {
   imageStore(arg_0_1, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_77c0ae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
index b67042b..aaa1cde 100644
--- a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_7cec8d() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_7cec8d() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_7cec8d();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_7cec8d() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_7cec8d();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
index c36928a..ca11490 100644
--- a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_7f7fae() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_7f7fae() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_7f7fae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_7f7fae() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_7f7fae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
index b7b0580..96b4132 100644
--- a/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_804942() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_804942() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_804942();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_804942() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_804942();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
index 88e7036..c3a8b69 100644
--- a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_805dae() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_805dae() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_805dae();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_805dae() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_805dae();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
index 1d2ea07..78ab18d 100644
--- a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_83bcc1() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_83bcc1() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_83bcc1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_83bcc1() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_83bcc1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
index ed49302..a0a3487 100644
--- a/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_872747() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_872747() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_872747();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_872747() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_872747();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
index 67e1537..0a9786f 100644
--- a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_8e0479() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_8e0479() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_8e0479();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_8e0479() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_8e0479();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
index 633eaa4..13f51c8 100644
--- a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_8f71a1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_8f71a1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_8f71a1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_8f71a1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_8f71a1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
index d6d0f3c..e72df96 100644
--- a/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_969534() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_969534() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_969534();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_969534() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_969534();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
index ba254e6..6cf74ae 100644
--- a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_9a3ecc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_9a3ecc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_9a3ecc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_9a3ecc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_9a3ecc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
index 17f8574..84d3e1d 100644
--- a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_9d9cd5() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_9d9cd5() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_9d9cd5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_9d9cd5() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_9d9cd5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
index e42de058..3c61f8d 100644
--- a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_9e3ec5() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_9e3ec5() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_9e3ec5();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_9e3ec5() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_9e3ec5();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
index cf92f73..9aa0f0a 100644
--- a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ac67aa() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ac67aa() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_ac67aa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ac67aa() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_ac67aa();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
index ddedb0f..005a4b0 100644
--- a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_b706b1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_b706b1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_b706b1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_b706b1() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_b706b1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
index c2606c1..2444cd8 100644
--- a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_bbcb7f() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_bbcb7f() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_bbcb7f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2D arg_0_1;
-
 void textureStore_bbcb7f() {
   imageStore(arg_0_1, ivec2(0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_bbcb7f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
index 982658a..191c3d8 100644
--- a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_be6e30() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_be6e30() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_be6e30();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image2D arg_0_1;
-
 void textureStore_be6e30() {
   imageStore(arg_0_1, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_be6e30();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
index de8414d..cd820c6 100644
--- a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_bf775c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_bf775c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -58,11 +57,11 @@
   textureStore_bf775c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_bf775c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -89,11 +87,11 @@
   textureStore_bf775c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'iimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
index e513d6a..41ebd4f 100644
--- a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_c5af1e() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_c5af1e() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_c5af1e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_c5af1e() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_c5af1e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
index 056432f..1b134c9 100644
--- a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_c863be() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_c863be() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_c863be();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image2DArray arg_0_1;
-
 void textureStore_c863be() {
   imageStore(arg_0_1, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_c863be();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
index dbb4a12..f5e63f8 100644
--- a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_d73b5c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_d73b5c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_d73b5c();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage1D arg_0_1;
-
 void textureStore_d73b5c() {
   imageStore(arg_0_1, 1, ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_d73b5c();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
index d8946a4..a03d447 100644
--- a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_dd7d81() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_dd7d81() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_dd7d81();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8_snorm) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_dd7d81() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_dd7d81();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
index 05b042f..22bef32 100644
--- a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_dde364() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_dde364() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -57,11 +56,11 @@
   textureStore_dde364();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32ui) uniform highp writeonly uimage2DArray arg_0_1;
-
 void textureStore_dde364() {
   imageStore(arg_0_1, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u));
 }
@@ -87,11 +85,11 @@
   textureStore_dde364();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
index d9d00e6..fb1e77d 100644
--- a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_e885e8() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_e885e8() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -58,11 +57,11 @@
   textureStore_e885e8();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba16f) uniform highp writeonly image1D arg_0_1;
-
 void textureStore_e885e8() {
   imageStore(arg_0_1, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -89,11 +87,11 @@
   textureStore_e885e8();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
index cd5619d..614d7fd 100644
--- a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_eb702f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_eb702f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -48,16 +47,15 @@
   textureStore_eb702f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_eb702f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -71,8 +69,8 @@
   textureStore_eb702f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
index 4d0dd64..e86a52f 100644
--- a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_eb78b9() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_eb78b9() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_eb78b9();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32i) uniform highp writeonly iimage3D arg_0_1;
-
 void textureStore_eb78b9() {
   imageStore(arg_0_1, ivec3(0, 0, 0), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_eb78b9();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
index 39fc638..d61f674 100644
--- a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_ee6acc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_ee6acc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -57,11 +56,11 @@
   textureStore_ee6acc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32f) uniform highp writeonly image3D arg_0_1;
-
 void textureStore_ee6acc() {
   imageStore(arg_0_1, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
@@ -87,11 +85,11 @@
   textureStore_ee6acc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
index 50cd686..9947cb5 100644
--- a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ef9f2f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ef9f2f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_ef9f2f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(r32ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_ef9f2f() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_ef9f2f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
index f8cc2ce..d8adbad 100644
--- a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_f8dead() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_f8dead() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -48,16 +47,15 @@
   textureStore_f8dead();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8ui) uniform highp writeonly uimage3D arg_0_1;
-
 void textureStore_f8dead() {
   imageStore(arg_0_1, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u));
 }
@@ -71,8 +69,8 @@
   textureStore_f8dead();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
index f188d4a..7947908 100644
--- a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_f9be83() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -44,7 +44,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_f9be83() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -57,11 +56,11 @@
   textureStore_f9be83();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
@@ -73,7 +72,6 @@
 precision mediump float;
 
 layout(rg32i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_f9be83() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -87,11 +85,11 @@
   textureStore_f9be83();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'image load-store format' : not supported with this profile: es
 ERROR: 0:4: '' : compilation terminated 
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
index b9c043d..4c10233 100644
--- a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
@@ -4,7 +4,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_fb9a8f() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -24,6 +23,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -32,7 +33,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -45,7 +45,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_fb9a8f() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -58,11 +57,11 @@
   textureStore_fb9a8f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
@@ -75,7 +74,6 @@
 precision mediump float;
 
 layout(rgba32ui) uniform highp writeonly uimage1D arg_0_1;
-
 void textureStore_fb9a8f() {
   imageStore(arg_0_1, 1, uvec4(0u, 0u, 0u, 0u));
 }
@@ -89,11 +87,11 @@
   textureStore_fb9a8f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:4: 'uimage1D' : Reserved word. 
 WARNING: 0:4: 'layout' : useless application of layout qualifier 
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
index c8c16c9..1a0cd07 100644
--- a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
@@ -2,7 +2,6 @@
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_fbf53f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -22,6 +21,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -30,12 +31,10 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_fbf53f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -48,16 +47,15 @@
   textureStore_fbf53f();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
 layout(rgba8i) uniform highp writeonly iimage2DArray arg_0_1;
-
 void textureStore_fbf53f() {
   imageStore(arg_0_1, ivec3(0, 0, 1), ivec4(0, 0, 0, 0));
 }
@@ -71,8 +69,8 @@
   textureStore_fbf53f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
index d526e53..cdac204 100644
--- a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_2585cd();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_2585cd();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl b/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
index 690387c..006212b 100644
--- a/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_31d679();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_31d679();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
index ec4cdee..0b22417 100644
--- a/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_31e37e();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_31e37e();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
index 7651b41f..56568c4 100644
--- a/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_4ce359();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_4ce359();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
index 7a5f776..4a9f2d1 100644
--- a/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_4dc9a1();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_4dc9a1();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl b/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
index 78e72ea..10e90c4 100644
--- a/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_854336();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_854336();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
index 8944817..6f8842b 100644
--- a/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_c1b600();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_c1b600();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
index 1efffd4..99f51a5 100644
--- a/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_d8f8ba();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_d8f8ba();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
index 80ab4e8..d608809 100644
--- a/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   transpose_ed4bdc();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   transpose_ed4bdc();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl b/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
index cdc4839..7c0765d 100644
--- a/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_562d05();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_562d05();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
index 0d50be7..dedadcc 100644
--- a/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_e183aa();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_e183aa();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
index 9bb7a77..7ebd607 100644
--- a/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_eb83df();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_eb83df();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
index 653a58c..feddb14 100644
--- a/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
@@ -20,6 +20,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -28,7 +30,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -44,11 +45,11 @@
   trunc_f370d3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 #version 310 es
 precision mediump float;
 
@@ -65,8 +66,8 @@
   trunc_f370d3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
diff --git a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
index be890b1..7dfd286 100644
--- a/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
@@ -28,6 +28,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -36,7 +38,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp highp uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
@@ -65,11 +66,11 @@
   unpack2x16float_32a5cf();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp mediump uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
@@ -99,11 +100,11 @@
   unpack2x16float_32a5cf();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: '&' :  wrong operand types: no operation '&' exists that takes a left-hand operand of type ' temp highp uint' and a right operand of type ' const int' (or there is no acceptable conversion)
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
index ed824f9..70c2c61 100644
--- a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack2x16snorm_b4aea6();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack2x16snorm_b4aea6();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
index 0e3d558..7b78901 100644
--- a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack2x16unorm_7699c0();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack2x16unorm_7699c0();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint2' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
index b95e186..6a7ff11 100644
--- a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack4x8snorm_523fb3();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack4x8snorm_523fb3();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'int4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
index 3c80c76..ab15ddd 100644
--- a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
+++ b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
@@ -29,6 +29,8 @@
   wrapper_result.value = inner_result;
   return wrapper_result;
 }
+
+
 void main() {
   tint_symbol outputs;
   outputs = vertex_main();
@@ -37,7 +39,6 @@
   gl_Position.y = -gl_Position.y;
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -67,11 +68,11 @@
   unpack4x8unorm_750c74();
   return;
 }
+
 void main() {
   fragment_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
@@ -102,11 +103,11 @@
   unpack4x8unorm_750c74();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
 Error parsing GLSL shader:
 ERROR: 0:6: 'uint4' : undeclared identifier 
 ERROR: 0:6: '' : compilation terminated 
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
index c099196..0ce18a6 100644
--- a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
@@ -10,8 +10,8 @@
   workgroupBarrier_a17f7f();
   return;
 }
+
 void main() {
   compute_main();
 }
 
-
