GLSL: add .expected.glsl files for all tests.

Bug: tint:1301
Change-Id: Id3a591a2fa0dfdb112046d5c57defbae07483e0d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/69480
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/test/access/let/matrix.spvasm.expected.glsl b/test/access/let/matrix.spvasm.expected.glsl
new file mode 100644
index 0000000..cde810e
--- /dev/null
+++ b/test/access/let/matrix.spvasm.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  float x_24 = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f))[1u].y;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/let/matrix.wgsl.expected.glsl b/test/access/let/matrix.wgsl.expected.glsl
new file mode 100644
index 0000000..69e59d1
--- /dev/null
+++ b/test/access/let/matrix.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  vec3 v = m[1];
+  float f = v[1];
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/let/vector.spvasm.expected.glsl b/test/access/let/vector.spvasm.expected.glsl
new file mode 100644
index 0000000..9f6a084
--- /dev/null
+++ b/test/access/let/vector.spvasm.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  float x_11 = vec3(1.0f, 2.0f, 3.0f).y;
+  vec2 x_13 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z);
+  vec3 x_14 = vec3(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/let/vector.wgsl.expected.glsl b/test/access/let/vector.wgsl.expected.glsl
new file mode 100644
index 0000000..fe1e88c
--- /dev/null
+++ b/test/access/let/vector.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  vec3 v = vec3(1.0f, 2.0f, 3.0f);
+  float scalar = v.y;
+  vec2 swizzle2 = v.xz;
+  vec3 swizzle3 = v.xzy;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/var/matrix.spvasm.expected.glsl b/test/access/var/matrix.spvasm.expected.glsl
new file mode 100644
index 0000000..453e9f2
--- /dev/null
+++ b/test/access/var/matrix.spvasm.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  mat3 m = mat3(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+  vec3 x_15 = m[1];
+  float x_16 = x_15.y;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/var/matrix.wgsl.expected.glsl b/test/access/var/matrix.wgsl.expected.glsl
new file mode 100644
index 0000000..8416591
--- /dev/null
+++ b/test/access/var/matrix.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  mat3 m = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 v = m[1];
+  float f = v[1];
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/var/vector.spvasm.expected.glsl b/test/access/var/vector.spvasm.expected.glsl
new file mode 100644
index 0000000..076fbef
--- /dev/null
+++ b/test/access/var/vector.spvasm.expected.glsl
@@ -0,0 +1,23 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  vec3 v = vec3(0.0f, 0.0f, 0.0f);
+  float x_14 = v.y;
+  vec3 x_16 = v;
+  vec2 x_17 = vec2(x_16.x, x_16.z);
+  vec3 x_18 = v;
+  vec3 x_19 = vec3(x_18.x, x_18.z, x_18.y);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/access/var/vector.wgsl.expected.glsl b/test/access/var/vector.wgsl.expected.glsl
new file mode 100644
index 0000000..545f673
--- /dev/null
+++ b/test/access/var/vector.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  vec3 v = vec3(0.0f, 0.0f, 0.0f);
+  float scalar = v.y;
+  vec2 swizzle2 = v.xz;
+  vec3 swizzle3 = v.xzy;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/array/assign_to_function_var.wgsl.expected.glsl b/test/array/assign_to_function_var.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/array/assign_to_function_var.wgsl.expected.glsl
diff --git a/test/array/assign_to_private_var.wgsl.expected.glsl b/test/array/assign_to_private_var.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/array/assign_to_private_var.wgsl.expected.glsl
diff --git a/test/array/assign_to_storage_var.wgsl.expected.glsl b/test/array/assign_to_storage_var.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/array/assign_to_storage_var.wgsl.expected.glsl
diff --git a/test/array/assign_to_subexpr.wgsl.expected.glsl b/test/array/assign_to_subexpr.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/array/assign_to_subexpr.wgsl.expected.glsl
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.glsl b/test/array/assign_to_workgroup_var.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.glsl
diff --git a/test/array/function_parameter.wgsl.expected.glsl b/test/array/function_parameter.wgsl.expected.glsl
new file mode 100644
index 0000000..9164984
--- /dev/null
+++ b/test/array/function_parameter.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+#version 310 es
+precision mediump float;
+
+float f1(float a[4]) {
+  return a[3];
+}
+
+float f2(float a[3][4]) {
+  return a[2][3];
+}
+
+float f3(float a[2][3][4]) {
+  return a[1][2][3];
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  float a1[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float a2[3][4] = float[3][4](float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f));
+  float a3[2][3][4] = float[2][3][4](float[3][4](float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f)), float[3][4](float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f)));
+  float v1 = f1(a1);
+  float v2 = f2(a2);
+  float v3 = f3(a3);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/array/function_return_type.wgsl.expected.glsl b/test/array/function_return_type.wgsl.expected.glsl
new file mode 100644
index 0000000..1a9b8b1
--- /dev/null
+++ b/test/array/function_return_type.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+#version 310 es
+precision mediump float;
+
+float[4] f1() {
+  float tint_symbol_1[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  return tint_symbol_1;
+}
+
+float[3][4] f2() {
+  float tint_symbol_2[3][4] = float[3][4](f1(), f1(), f1());
+  return tint_symbol_2;
+}
+
+float[2][3][4] f3() {
+  float tint_symbol_3[2][3][4] = float[2][3][4](f2(), f2());
+  return tint_symbol_3;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  float a1[4] = f1();
+  float a2[3][4] = f2();
+  float a3[2][3][4] = f3();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/array/size.wgsl.expected.glsl b/test/array/size.wgsl.expected.glsl
new file mode 100644
index 0000000..3f28448
--- /dev/null
+++ b/test/array/size.wgsl.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+const int slen = 4;
+const uint ulen = 4u;
+
+void tint_symbol() {
+  float signed_literal[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float unsigned_literal[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float signed_constant[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float unsigned_constant[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  signed_literal = unsigned_constant;
+  signed_constant = unsigned_literal;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/array/type_constructor.wgsl.expected.glsl b/test/array/type_constructor.wgsl.expected.glsl
new file mode 100644
index 0000000..25c35d3
--- /dev/null
+++ b/test/array/type_constructor.wgsl.expected.glsl
@@ -0,0 +1,45 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int x = 42;
+  int empty[4] = int[4](0, 0, 0, 0);
+  int nonempty[4] = int[4](1, 2, 3, 4);
+  int nonempty_with_expr[4] = int[4](1, x, (x + 1), nonempty[3]);
+  int nested_empty[2][3][4] = int[2][3][4](int[3][4](int[4](0, 0, 0, 0), int[4](0, 0, 0, 0), int[4](0, 0, 0, 0)), int[3][4](int[4](0, 0, 0, 0), int[4](0, 0, 0, 0), int[4](0, 0, 0, 0)));
+  int tint_symbol_1[4] = int[4](1, 2, 3, 4);
+  int tint_symbol_2[4] = int[4](5, 6, 7, 8);
+  int tint_symbol_3[4] = int[4](9, 10, 11, 12);
+  int tint_symbol_4[3][4] = int[3][4](tint_symbol_1, tint_symbol_2, tint_symbol_3);
+  int tint_symbol_5[4] = int[4](13, 14, 15, 16);
+  int tint_symbol_6[4] = int[4](17, 18, 19, 20);
+  int tint_symbol_7[4] = int[4](21, 22, 23, 24);
+  int tint_symbol_8[3][4] = int[3][4](tint_symbol_5, tint_symbol_6, tint_symbol_7);
+  int nested_nonempty[2][3][4] = int[2][3][4](tint_symbol_4, tint_symbol_8);
+  int tint_symbol_9[4] = int[4](1, 2, x, (x + 1));
+  int tint_symbol_10[4] = int[4](5, 6, nonempty[2], (nonempty[3] + 1));
+  int tint_symbol_11[3][4] = int[3][4](tint_symbol_9, tint_symbol_10, nonempty);
+  int nested_nonempty_with_expr[2][3][4] = int[2][3][4](tint_symbol_11, nested_nonempty[1]);
+  int tint_symbol_12[4] = int[4](0, 0, 0, 0);
+  int subexpr_empty = tint_symbol_12[1];
+  int tint_symbol_13[4] = int[4](1, 2, 3, 4);
+  int subexpr_nonempty = tint_symbol_13[2];
+  int tint_symbol_14[4] = int[4](1, x, (x + 1), nonempty[3]);
+  int subexpr_nonempty_with_expr = tint_symbol_14[2];
+  int tint_symbol_15[2][4] = int[2][4](int[4](0, 0, 0, 0), int[4](0, 0, 0, 0));
+  int subexpr_nested_empty[4] = tint_symbol_15[1];
+  int tint_symbol_16[4] = int[4](1, 2, 3, 4);
+  int tint_symbol_17[4] = int[4](5, 6, 7, 8);
+  int tint_symbol_18[2][4] = int[2][4](tint_symbol_16, tint_symbol_17);
+  int subexpr_nested_nonempty[4] = tint_symbol_18[1];
+  int tint_symbol_19[4] = int[4](1, x, (x + 1), nonempty[3]);
+  int tint_symbol_20[2][4] = int[2][4](tint_symbol_19, nested_nonempty[1][2]);
+  int subexpr_nested_nonempty_with_expr[4] = tint_symbol_20[1];
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl b/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl
new file mode 100644
index 0000000..4272981
--- /dev/null
+++ b/test/buffer/storage/dynamic_index/read.wgsl.expected.glsl
@@ -0,0 +1,47 @@
+#version 310 es
+precision mediump float;
+
+struct Inner {
+  ivec3 a;
+  int b;
+  uvec3 c;
+  uint d;
+  vec3 e;
+  float f;
+  mat2x3 g;
+  mat3x2 h;
+  ivec4 i[4];
+};
+
+layout (binding = 0) buffer S_1 {
+  Inner arr[];
+} s;
+
+struct tint_symbol_2 {
+  uint idx;
+};
+
+void tint_symbol_inner(uint idx) {
+  ivec3 a = s.arr[idx].a;
+  int b = s.arr[idx].b;
+  uvec3 c = s.arr[idx].c;
+  uint d = s.arr[idx].d;
+  vec3 e = s.arr[idx].e;
+  float f = s.arr[idx].f;
+  mat2x3 g = s.arr[idx].g;
+  mat3x2 h = s.arr[idx].h;
+  ivec4 i[4] = s.arr[idx].i;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.idx);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.idx = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
diff --git a/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl b/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl
new file mode 100644
index 0000000..8babfbd
--- /dev/null
+++ b/test/buffer/storage/dynamic_index/write.wgsl.expected.glsl
@@ -0,0 +1,48 @@
+#version 310 es
+precision mediump float;
+
+struct Inner {
+  ivec3 a;
+  int b;
+  uvec3 c;
+  uint d;
+  vec3 e;
+  float f;
+  mat2x3 g;
+  mat3x2 h;
+  ivec4 i[4];
+};
+
+layout (binding = 0) buffer S_1 {
+  Inner arr[];
+} s;
+
+struct tint_symbol_2 {
+  uint idx;
+};
+
+void tint_symbol_inner(uint idx) {
+  s.arr[idx].a = ivec3(0, 0, 0);
+  s.arr[idx].b = 0;
+  s.arr[idx].c = uvec3(0u, 0u, 0u);
+  s.arr[idx].d = 0u;
+  s.arr[idx].e = vec3(0.0f, 0.0f, 0.0f);
+  s.arr[idx].f = 0.0f;
+  s.arr[idx].g = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  s.arr[idx].h = mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  ivec4 tint_symbol_3[4] = ivec4[4](ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+  s.arr[idx].i = tint_symbol_3;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.idx);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.idx = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
diff --git a/test/buffer/storage/static_index/read.wgsl.expected.glsl b/test/buffer/storage/static_index/read.wgsl.expected.glsl
new file mode 100644
index 0000000..4e36bd3
--- /dev/null
+++ b/test/buffer/storage/static_index/read.wgsl.expected.glsl
@@ -0,0 +1,42 @@
+#version 310 es
+precision mediump float;
+
+struct Inner {
+  int x;
+};
+struct tint_padded_array_element {
+  Inner el;
+};
+
+layout (binding = 0) buffer S_1 {
+  ivec3 a;
+  int b;
+  uvec3 c;
+  uint d;
+  vec3 e;
+  float f;
+  mat2x3 g;
+  mat3x2 h;
+  Inner i;
+  tint_padded_array_element j[4];
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  ivec3 a = s.a;
+  int b = s.b;
+  uvec3 c = s.c;
+  uint d = s.d;
+  vec3 e = s.e;
+  float f = s.f;
+  mat2x3 g = s.g;
+  mat3x2 h = s.h;
+  Inner i = s.i;
+  tint_padded_array_element j[4] = s.j;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/buffer/storage/static_index/write.wgsl.expected.glsl b/test/buffer/storage/static_index/write.wgsl.expected.glsl
new file mode 100644
index 0000000..ab273ea
--- /dev/null
+++ b/test/buffer/storage/static_index/write.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+#version 310 es
+precision mediump float;
+
+struct Inner {
+  int x;
+};
+struct tint_padded_array_element {
+  Inner el;
+};
+
+layout (binding = 0) buffer S_1 {
+  ivec3 a;
+  int b;
+  uvec3 c;
+  uint d;
+  vec3 e;
+  float f;
+  mat2x3 g;
+  mat3x2 h;
+  Inner i;
+  tint_padded_array_element j[4];
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  s.a = ivec3(0, 0, 0);
+  s.b = 0;
+  s.c = uvec3(0u, 0u, 0u);
+  s.d = 0u;
+  s.e = vec3(0.0f, 0.0f, 0.0f);
+  s.f = 0.0f;
+  s.g = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  s.h = mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  Inner tint_symbol_1 = Inner(0);
+  s.i = tint_symbol_1;
+  tint_padded_array_element tint_symbol_2[4] = tint_padded_array_element[4](tint_padded_array_element(Inner(0)), tint_padded_array_element(Inner(0)), tint_padded_array_element(Inner(0)), tint_padded_array_element(Inner(0)));
+  s.j = tint_symbol_2;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl b/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
new file mode 100644
index 0000000..a21368d
--- /dev/null
+++ b/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+precision mediump float;
+
+struct Inner {
+  ivec3 a;
+  int b;
+  uvec3 c;
+  uint d;
+  vec3 e;
+  float f;
+  ivec2 g;
+  ivec2 h;
+  mat2x3 i;
+  mat3x2 j;
+  ivec4 k[4];
+};
+
+layout (binding = 0) uniform S_1 {
+  Inner arr[8];
+} s;
+
+struct tint_symbol_2 {
+  uint idx;
+};
+
+void tint_symbol_inner(uint idx) {
+  ivec3 a = s.arr[idx].a;
+  int b = s.arr[idx].b;
+  uvec3 c = s.arr[idx].c;
+  uint d = s.arr[idx].d;
+  vec3 e = s.arr[idx].e;
+  float f = s.arr[idx].f;
+  ivec2 g = s.arr[idx].g;
+  ivec2 h = s.arr[idx].h;
+  mat2x3 i = s.arr[idx].i;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.idx);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.idx = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
diff --git a/test/buffer/uniform/static_index/read.wgsl.expected.glsl b/test/buffer/uniform/static_index/read.wgsl.expected.glsl
new file mode 100644
index 0000000..27169f0
--- /dev/null
+++ b/test/buffer/uniform/static_index/read.wgsl.expected.glsl
@@ -0,0 +1,46 @@
+#version 310 es
+precision mediump float;
+
+struct Inner {
+  int x;
+};
+struct tint_padded_array_element {
+  Inner el;
+};
+
+layout (binding = 0) uniform S_1 {
+  ivec3 a;
+  int b;
+  uvec3 c;
+  uint d;
+  vec3 e;
+  float f;
+  ivec2 g;
+  ivec2 h;
+  mat2x3 i;
+  mat3x2 j;
+  Inner k;
+  tint_padded_array_element l[4];
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  ivec3 a = s.a;
+  int b = s.b;
+  uvec3 c = s.c;
+  uint d = s.d;
+  vec3 e = s.e;
+  float f = s.f;
+  ivec2 g = s.g;
+  ivec2 h = s.h;
+  mat2x3 i = s.i;
+  mat3x2 j = s.j;
+  Inner k = s.k;
+  tint_padded_array_element l[4] = s.l;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/chromium/1221120.wgsl.expected.glsl b/test/bug/chromium/1221120.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/chromium/1221120.wgsl.expected.glsl
diff --git a/test/bug/chromium/1236161.wgsl.expected.glsl b/test/bug/chromium/1236161.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/chromium/1236161.wgsl.expected.glsl
diff --git a/test/bug/chromium/1251009.wgsl.expected.glsl b/test/bug/chromium/1251009.wgsl.expected.glsl
new file mode 100644
index 0000000..eac1d6f
--- /dev/null
+++ b/test/bug/chromium/1251009.wgsl.expected.glsl
@@ -0,0 +1,55 @@
+#version 310 es
+precision mediump float;
+
+struct VertexInputs0 {
+  uint vertex_index;
+  int loc0;
+};
+struct VertexInputs1 {
+  uint loc1;
+  vec4 loc3;
+};
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  uint loc1_1;
+  vec4 loc3;
+  uint vertex_index;
+  uint instance_index;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(VertexInputs0 inputs0, uint loc1, uint instance_index, VertexInputs1 inputs1) {
+  uint foo = (inputs0.vertex_index + instance_index);
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  VertexInputs0 tint_symbol_4 = VertexInputs0(tint_symbol_1.vertex_index, tint_symbol_1.loc0);
+  VertexInputs1 tint_symbol_5 = VertexInputs1(tint_symbol_1.loc1_1, tint_symbol_1.loc3);
+  vec4 inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.loc1, tint_symbol_1.instance_index, tint_symbol_5);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+in int loc0;
+in uint loc1;
+in uint loc1_1;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc1_1 = loc1_1;
+  inputs.loc3 = loc3;
+  inputs.vertex_index = uint(gl_VertexID);
+  inputs.instance_index = uint(gl_InstanceID);
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/bug/dawn/947.wgsl.expected.glsl b/test/bug/dawn/947.wgsl.expected.glsl
new file mode 100644
index 0000000..d9d9455
--- /dev/null
+++ b/test/bug/dawn/947.wgsl.expected.glsl
@@ -0,0 +1,120 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Uniforms_1 {
+  vec2 u_scale;
+  vec2 u_offset;
+} uniforms;
+
+struct VertexOutputs {
+  vec2 texcoords;
+  vec4 position;
+};
+struct tint_symbol_2 {
+  uint VertexIndex;
+};
+struct tint_symbol_3 {
+  vec2 texcoords;
+  vec4 position;
+};
+
+VertexOutputs vs_main_inner(uint VertexIndex) {
+  vec2 texcoord[3] = vec2[3](vec2(-0.5f, 0.0f), vec2(1.5f, 0.0f), vec2(0.5f, 2.0f));
+  VertexOutputs tint_symbol = VertexOutputs(vec2(0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  tint_symbol.position = vec4(((texcoord[VertexIndex] * 2.0f) - vec2(1.0f, 1.0f)), 0.0f, 1.0f);
+  bool flipY = (uniforms.u_scale.y < 0.0f);
+  if (flipY) {
+    tint_symbol.texcoords = ((((texcoord[VertexIndex] * uniforms.u_scale) + uniforms.u_offset) * vec2(1.0f, -1.0f)) + vec2(0.0f, 1.0f));
+  } else {
+    tint_symbol.texcoords = ((((texcoord[VertexIndex] * vec2(1.0f, -1.0f)) + vec2(0.0f, 1.0f)) * uniforms.u_scale) + uniforms.u_offset);
+  }
+  return tint_symbol;
+}
+
+struct tint_symbol_5 {
+  vec2 texcoord;
+};
+struct tint_symbol_6 {
+  vec4 value;
+};
+
+tint_symbol_3 vs_main(tint_symbol_2 tint_symbol_1) {
+  VertexOutputs inner_result = vs_main_inner(tint_symbol_1.VertexIndex);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec2(0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.texcoords = inner_result.texcoords;
+  wrapper_result.position = inner_result.position;
+  return wrapper_result;
+}
+out vec2 texcoords;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.VertexIndex = uint(gl_VertexID);
+  tint_symbol_3 outputs;
+  outputs = vs_main(inputs);
+  texcoords = outputs.texcoords;
+  gl_Position = outputs.position;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct VertexOutputs {
+  vec2 texcoords;
+  vec4 position;
+};
+struct tint_symbol_2 {
+  uint VertexIndex;
+};
+struct tint_symbol_3 {
+  vec2 texcoords;
+  vec4 position;
+};
+
+
+uniform highp sampler2D myTexture;
+
+struct tint_symbol_5 {
+  vec2 texcoord;
+};
+struct tint_symbol_6 {
+  vec4 value;
+};
+
+vec4 fs_main_inner(vec2 texcoord) {
+  vec2 clampedTexcoord = clamp(texcoord, vec2(0.0f, 0.0f), vec2(1.0f, 1.0f));
+  if (!(all((clampedTexcoord == texcoord)))) {
+    discard;
+  }
+  vec4 srcColor = texture(myTexture, texcoord);
+  return srcColor;
+}
+
+tint_symbol_6 fs_main(tint_symbol_5 tint_symbol_4) {
+  vec4 inner_result_1 = fs_main_inner(tint_symbol_4.texcoord);
+  tint_symbol_6 wrapper_result_1 = tint_symbol_6(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+in vec2 texcoord;
+out vec4 value;
+void main() {
+  tint_symbol_5 inputs;
+  inputs.texcoord = texcoord;
+  tint_symbol_6 outputs;
+  outputs = fs_main(inputs);
+  value = outputs.value;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:28: 'all' : no matching overloaded function found 
+ERROR: 0:28: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl
new file mode 100644
index 0000000..8920c6e
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+  result.tint_symbol = s.data[ubo.dynamic_idx];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl
new file mode 100644
index 0000000..22345a8
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  result.tint_symbol = s.data[ubo.dynamic_idx];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl
new file mode 100644
index 0000000..e314c42
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+layout (binding = 2) buffer Result_1 {
+  int tint_symbol;
+} result;
+
+layout (binding = 1) buffer SSBO_1 {
+  int data[4];
+} ssbo;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  result.tint_symbol = ssbo.data[ubo.dynamic_idx];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl
new file mode 100644
index 0000000..f0eb7e8
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+#version 310 es
+precision mediump float;
+
+struct tint_padded_array_element {
+  int el;
+};
+
+layout (binding = 0) uniform UBO_1 {
+  tint_padded_array_element data[4];
+  int dynamic_idx;
+} ubo;
+
+layout (binding = 2) buffer Result_1 {
+  int tint_symbol;
+} result;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  result.tint_symbol = ubo.data[ubo.dynamic_idx].el;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
new file mode 100644
index 0000000..c1acee0
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
@@ -0,0 +1,52 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+groupshared S s;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void f_inner(uint local_invocation_index) {
+  {
+    for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
+      uint i = idx;
+      s.data[i] = 0;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  result.tint_symbol = s.data[ubo.dynamic_idx];
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f(tint_symbol_2 tint_symbol_1) {
+  f_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  f(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:16: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl
new file mode 100644
index 0000000..3a085d7
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+  s.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = s.data[3];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl
new file mode 100644
index 0000000..5009af2
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.glsl
@@ -0,0 +1,32 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+
+void x(inout S p) {
+  p.data[ubo.dynamic_idx] = 1;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+  x(s);
+  result.tint_symbol = s.data[3];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl
new file mode 100644
index 0000000..ef743de
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  s.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = s.data[3];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl
new file mode 100644
index 0000000..ee89365
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.glsl
@@ -0,0 +1,32 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+S s = S(int[64](0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+
+void x(inout S p) {
+  p.data[ubo.dynamic_idx] = 1;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  x(s);
+  result.tint_symbol = s.data[3];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl
new file mode 100644
index 0000000..4374a4f
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+layout (binding = 2) buffer Result_1 {
+  int tint_symbol;
+} result;
+
+layout (binding = 1) buffer SSBO_1 {
+  int data[4];
+} ssbo;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ssbo.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = ssbo.data[3];
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
new file mode 100644
index 0000000..c561688
--- /dev/null
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
@@ -0,0 +1,53 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform UBO_1 {
+  int dynamic_idx;
+} ubo;
+
+struct S {
+  int data[64];
+};
+
+layout (binding = 1) buffer Result_1 {
+  int tint_symbol;
+} result;
+groupshared S s;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void f_inner(uint local_invocation_index) {
+  {
+    for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
+      uint i = idx;
+      s.data[i] = 0;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  s.data[ubo.dynamic_idx] = 1;
+  result.tint_symbol = s.data[3];
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f(tint_symbol_2 tint_symbol_1) {
+  f_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  f(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:16: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl
new file mode 100644
index 0000000..dcde12e
--- /dev/null
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.glsl
@@ -0,0 +1,33 @@
+#version 310 es
+precision mediump float;
+
+vec2 v2f = vec2(0.0f, 0.0f);
+ivec3 v3i = ivec3(0, 0, 0);
+uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
+bvec2 v2b = bvec2(false, false);
+
+void foo() {
+  {
+    for(int i = 0; (i < 2); i = (i + 1)) {
+      v2f[i] = 1.0f;
+      v3i[i] = 1;
+      v4u[i] = 1u;
+      v2b[i] = true;
+    }
+  }
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  {
+    for(int i = 0; (i < 2); i = (i + 1)) {
+      foo();
+    }
+  }
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl
new file mode 100644
index 0000000..680bcaa
--- /dev/null
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+#version 310 es
+precision mediump float;
+
+vec2 v2f = vec2(0.0f, 0.0f);
+ivec3 v3i = ivec3(0, 0, 0);
+uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
+bvec2 v2b = bvec2(false, false);
+
+void foo() {
+  int i = 0;
+  v2f[i] = 1.0f;
+  v3i[i] = 1;
+  v4u[i] = 1u;
+  v2b[i] = true;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  {
+    for(int i = 0; (i < 2); i = (i + 1)) {
+      foo();
+    }
+  }
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl
new file mode 100644
index 0000000..ad1e7e7
--- /dev/null
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.glsl
@@ -0,0 +1,40 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  vec2 v2f = vec2(0.0f, 0.0f);
+  vec3 v3f = vec3(0.0f, 0.0f, 0.0f);
+  vec4 v4f = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  ivec2 v2i = ivec2(0, 0);
+  ivec3 v3i = ivec3(0, 0, 0);
+  ivec4 v4i = ivec4(0, 0, 0, 0);
+  uvec2 v2u = uvec2(0u, 0u);
+  uvec3 v3u = uvec3(0u, 0u, 0u);
+  uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
+  bvec2 v2b = bvec2(false, false);
+  bvec3 v3b = bvec3(false, false, false);
+  bvec4 v4b = bvec4(false, false, false, false);
+  {
+    for(int i = 0; (i < 2); i = (i + 1)) {
+      v2f[i] = 1.0f;
+      v3f[i] = 1.0f;
+      v4f[i] = 1.0f;
+      v2i[i] = 1;
+      v3i[i] = 1;
+      v4i[i] = 1;
+      v2u[i] = 1u;
+      v3u[i] = 1u;
+      v4u[i] = 1u;
+      v2b[i] = true;
+      v3b[i] = true;
+      v4b[i] = true;
+    }
+  }
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl
new file mode 100644
index 0000000..8154232
--- /dev/null
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.glsl
@@ -0,0 +1,32 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  vec2 v2f = vec2(0.0f, 0.0f);
+  vec2 v2f_2 = vec2(0.0f, 0.0f);
+  ivec3 v3i = ivec3(0, 0, 0);
+  ivec3 v3i_2 = ivec3(0, 0, 0);
+  uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
+  uvec4 v4u_2 = uvec4(0u, 0u, 0u, 0u);
+  bvec2 v2b = bvec2(false, false);
+  bvec2 v2b_2 = bvec2(false, false);
+  {
+    for(int i = 0; (i < 2); i = (i + 1)) {
+      v2f[i] = 1.0f;
+      v3i[i] = 1;
+      v4u[i] = 1u;
+      v2b[i] = true;
+      v2f_2[i] = 1.0f;
+      v3i_2[i] = 1;
+      v4u_2[i] = 1u;
+      v2b_2[i] = true;
+    }
+  }
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl
new file mode 100644
index 0000000..7211d43
--- /dev/null
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.glsl
@@ -0,0 +1,41 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  vec2 v2f = vec2(0.0f, 0.0f);
+  vec3 v3f = vec3(0.0f, 0.0f, 0.0f);
+  vec4 v4f = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  ivec2 v2i = ivec2(0, 0);
+  ivec3 v3i = ivec3(0, 0, 0);
+  ivec4 v4i = ivec4(0, 0, 0, 0);
+  uvec2 v2u = uvec2(0u, 0u);
+  uvec3 v3u = uvec3(0u, 0u, 0u);
+  uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
+  bvec2 v2b = bvec2(false, false);
+  bvec3 v3b = bvec3(false, false, false);
+  bvec4 v4b = bvec4(false, false, false, false);
+  {
+    for(int i = 0; (i < 2); i = (i + 1)) {
+      v2f[i] = 1.0f;
+      v2i[i] = 1;
+      v2u[i] = 1u;
+      v2b[i] = true;
+    }
+  }
+  int i = 0;
+  v3f[i] = 1.0f;
+  v4f[i] = 1.0f;
+  v3i[i] = 1;
+  v4i[i] = 1;
+  v3u[i] = 1u;
+  v4u[i] = 1u;
+  v3b[i] = true;
+  v4b[i] = true;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl
new file mode 100644
index 0000000..b81b3b6
--- /dev/null
+++ b/test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl.expected.glsl
@@ -0,0 +1,37 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  vec2 v2f = vec2(0.0f, 0.0f);
+  vec3 v3f = vec3(0.0f, 0.0f, 0.0f);
+  vec4 v4f = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  ivec2 v2i = ivec2(0, 0);
+  ivec3 v3i = ivec3(0, 0, 0);
+  ivec4 v4i = ivec4(0, 0, 0, 0);
+  uvec2 v2u = uvec2(0u, 0u);
+  uvec3 v3u = uvec3(0u, 0u, 0u);
+  uvec4 v4u = uvec4(0u, 0u, 0u, 0u);
+  bvec2 v2b = bvec2(false, false);
+  bvec3 v3b = bvec3(false, false, false);
+  bvec4 v4b = bvec4(false, false, false, false);
+  int i = 0;
+  v2f[i] = 1.0f;
+  v3f[i] = 1.0f;
+  v4f[i] = 1.0f;
+  v2i[i] = 1;
+  v3i[i] = 1;
+  v4i[i] = 1;
+  v2u[i] = 1u;
+  v3u[i] = 1u;
+  v4u[i] = 1u;
+  v2b[i] = true;
+  v3b[i] = true;
+  v4b[i] = true;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/1046.wgsl.expected.glsl b/test/bug/tint/1046.wgsl.expected.glsl
new file mode 100644
index 0000000..c82363c
--- /dev/null
+++ b/test/bug/tint/1046.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct PointLight {
+  vec4 position;
+};
+
+layout (binding = 0) uniform Uniforms_1 {
+  mat4 worldView;
+  mat4 proj;
+  uint numPointLights;
+  uint color_source;
+  vec4 color;
+} uniforms;
+layout (binding = 1) buffer PointLights_1 {
+  PointLight values[];
+} pointLights;
+
+uniform highp sampler2D myTexture;
+
+struct FragmentInput {
+  vec4 position;
+  vec4 view_position;
+  vec4 normal;
+  vec2 uv;
+  vec4 color;
+};
+struct FragmentOutput {
+  vec4 color;
+};
+struct tint_symbol_3 {
+  vec4 view_position;
+  vec4 normal;
+  vec2 uv;
+  vec4 color;
+  vec4 position;
+};
+struct tint_symbol_4 {
+  vec4 color;
+};
+
+FragmentOutput tint_symbol_inner(FragmentInput fragment) {
+  FragmentOutput tint_symbol_1 = FragmentOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  tint_symbol_1.color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
+  return tint_symbol_1;
+}
+
+tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
+  FragmentInput tint_symbol_5 = FragmentInput(tint_symbol_2.position, tint_symbol_2.view_position, tint_symbol_2.normal, tint_symbol_2.uv, tint_symbol_2.color);
+  FragmentOutput inner_result = tint_symbol_inner(tint_symbol_5);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.color = inner_result.color;
+  return wrapper_result;
+}
+in vec4 view_position;
+in vec4 normal;
+in vec2 uv;
+in vec4 color;
+out vec4 color;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.view_position = view_position;
+  inputs.normal = normal;
+  inputs.uv = uv;
+  inputs.color = color;
+  inputs.position = gl_FragCoord;
+  tint_symbol_4 outputs;
+  outputs = tint_symbol(inputs);
+  color = outputs.color;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:59: 'color' : redefinition 
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/1064.wgsl.expected.glsl b/test/bug/tint/1064.wgsl.expected.glsl
new file mode 100644
index 0000000..c93c639
--- /dev/null
+++ b/test/bug/tint/1064.wgsl.expected.glsl
@@ -0,0 +1,23 @@
+#version 310 es
+precision mediump float;
+
+void tint_symbol() {
+  while (true) {
+    if (false) {
+    } else {
+      break;
+    }
+    {
+      if (true) {
+      } else {
+        break;
+      }
+    }
+  }
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/1076.wgsl.expected.glsl b/test/bug/tint/1076.wgsl.expected.glsl
new file mode 100644
index 0000000..706f82f
--- /dev/null
+++ b/test/bug/tint/1076.wgsl.expected.glsl
@@ -0,0 +1,56 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct FragIn {
+  float a;
+  uint mask;
+};
+struct tint_symbol_3 {
+  float a;
+  float b;
+  uint mask;
+};
+struct tint_symbol_4 {
+  float a;
+  uint mask;
+};
+
+FragIn tint_symbol_inner(FragIn tint_symbol_1, float b) {
+  if ((tint_symbol_1.mask == 0u)) {
+    return tint_symbol_1;
+  }
+  FragIn tint_symbol_5 = FragIn(b, 1u);
+  return tint_symbol_5;
+}
+
+tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
+  FragIn tint_symbol_6 = FragIn(tint_symbol_2.a, tint_symbol_2.mask);
+  FragIn inner_result = tint_symbol_inner(tint_symbol_6, tint_symbol_2.b);
+  tint_symbol_4 wrapper_result = tint_symbol_4(0.0f, 0u);
+  wrapper_result.a = inner_result.a;
+  wrapper_result.mask = inner_result.mask;
+  return wrapper_result;
+}
+in float a;
+in float b;
+out float a;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.a = a;
+  inputs.b = b;
+  inputs.mask = uint(gl_SampleMask);
+  tint_symbol_4 outputs;
+  outputs = tint_symbol(inputs);
+  a = outputs.a;
+  gl_SampleMask = outputs.mask;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:36: 'a' : redefinition 
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/1081.wgsl.expected.glsl b/test/bug/tint/1081.wgsl.expected.glsl
new file mode 100644
index 0000000..f86361a
--- /dev/null
+++ b/test/bug/tint/1081.wgsl.expected.glsl
@@ -0,0 +1,58 @@
+SKIP: FAILED
+
+bug/tint/1081.wgsl:9:25 warning: integral user-defined fragment inputs must have a flat interpolation attribute
+fn main([[location(1)]] x: vec3<i32>) -> [[location(2)]] i32 {
+                        ^
+
+#version 310 es
+precision mediump float;
+
+int f(int x) {
+  if ((x == 10)) {
+    discard;
+  }
+  return x;
+}
+
+struct tint_symbol_2 {
+  ivec3 x;
+};
+struct tint_symbol_3 {
+  int value;
+};
+
+int tint_symbol_inner(ivec3 x) {
+  int y = x.x;
+  while (true) {
+    int r = f(y);
+    if ((r == 0)) {
+      break;
+    }
+  }
+  return y;
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  int inner_result = tint_symbol_inner(tint_symbol_1.x);
+  tint_symbol_3 wrapper_result = tint_symbol_3(0);
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+in ivec3 x;
+out int value;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.x = x;
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  value = outputs.value;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:35: 'int' : must be qualified as flat in
+ERROR: 0:35: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/1083.wgsl.expected.glsl b/test/bug/tint/1083.wgsl.expected.glsl
new file mode 100644
index 0000000..96a62a0
--- /dev/null
+++ b/test/bug/tint/1083.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int c = (1 / 0);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/tint/1086.wgsl.expected.glsl b/test/bug/tint/1086.wgsl.expected.glsl
new file mode 100644
index 0000000..23d3599
--- /dev/null
+++ b/test/bug/tint/1086.wgsl.expected.glsl
@@ -0,0 +1,22 @@
+#version 310 es
+precision mediump float;
+
+float v = 0.0f;
+
+void x(inout float p) {
+  p = 0.0f;
+}
+
+void g() {
+  x(v);
+}
+
+void f() {
+  g();
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/bug/tint/1088.spvasm.expected.glsl b/test/bug/tint/1088.spvasm.expected.glsl
new file mode 100644
index 0000000..d1e9121
--- /dev/null
+++ b/test/bug/tint/1088.spvasm.expected.glsl
@@ -0,0 +1,90 @@
+#version 310 es
+precision mediump float;
+
+struct tint_padded_array_element {
+  float el;
+};
+
+vec3 position = vec3(0.0f, 0.0f, 0.0f);
+layout (binding = 2) uniform LeftOver_1 {
+  mat4 worldViewProjection;
+  float time;
+  mat4 test2[2];
+  tint_padded_array_element test[4];
+} x_14;
+vec2 vUV = vec2(0.0f, 0.0f);
+vec2 uv = vec2(0.0f, 0.0f);
+vec3 normal = vec3(0.0f, 0.0f, 0.0f);
+vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void main_1() {
+  vec4 q = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 p = vec3(0.0f, 0.0f, 0.0f);
+  vec3 x_13 = position;
+  q = vec4(x_13.x, x_13.y, x_13.z, 1.0f);
+  vec4 x_21 = q;
+  p = vec3(x_21.x, x_21.y, x_21.z);
+  float x_27 = p.x;
+  float x_41 = x_14.test[0].el;
+  float x_45 = position.y;
+  float x_49 = x_14.time;
+  p.x = (x_27 + sin(((x_41 * x_45) + x_49)));
+  float x_55 = p.y;
+  float x_57 = x_14.time;
+  p.y = (x_55 + sin((x_57 + 4.0f)));
+  mat4 x_69 = x_14.worldViewProjection;
+  vec3 x_70 = p;
+  tint_symbol = (x_69 * vec4(x_70.x, x_70.y, x_70.z, 1.0f));
+  vUV = uv;
+  float x_87 = tint_symbol.y;
+  tint_symbol.y = (x_87 * -1.0f);
+  return;
+}
+
+struct main_out {
+  vec4 tint_symbol;
+  vec2 vUV_1;
+};
+struct tint_symbol_3 {
+  vec3 position_param;
+  vec3 normal_param;
+  vec2 uv_param;
+};
+struct tint_symbol_4 {
+  vec2 vUV_1;
+  vec4 tint_symbol;
+};
+
+main_out tint_symbol_1_inner(vec3 position_param, vec2 uv_param, vec3 normal_param) {
+  position = position_param;
+  uv = uv_param;
+  normal = normal_param;
+  main_1();
+  main_out tint_symbol_5 = main_out(tint_symbol, vUV);
+  return tint_symbol_5;
+}
+
+tint_symbol_4 tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  main_out inner_result = tint_symbol_1_inner(tint_symbol_2.position_param, tint_symbol_2.uv_param, tint_symbol_2.normal_param);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec2(0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.tint_symbol = inner_result.tint_symbol;
+  wrapper_result.vUV_1 = inner_result.vUV_1;
+  return wrapper_result;
+}
+in vec3 position_param;
+in vec3 normal_param;
+in vec2 uv_param;
+out vec2 vUV_1;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.position_param = position_param;
+  inputs.normal_param = normal_param;
+  inputs.uv_param = uv_param;
+  tint_symbol_4 outputs;
+  outputs = tint_symbol_1(inputs);
+  vUV_1 = outputs.vUV_1;
+  gl_Position = outputs.tint_symbol;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/bug/tint/1113.wgsl.expected.glsl b/test/bug/tint/1113.wgsl.expected.glsl
new file mode 100644
index 0000000..0aeef4e
--- /dev/null
+++ b/test/bug/tint/1113.wgsl.expected.glsl
@@ -0,0 +1,357 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Uniforms_1 {
+  uint numTriangles;
+  uint gridSize;
+  uint pad1;
+  uint pad2;
+  vec3 bbMin;
+  vec3 bbMax;
+} uniforms;
+layout (binding = 10) buffer U32s_1 {
+  uint values[];
+} indices;
+layout (binding = 11) buffer F32s_1 {
+  float values[];
+} positions;
+layout (binding = 20) buffer AU32s_1 {
+  uint values[];
+} counters;
+layout (binding = 21) buffer AI32s_1 {
+  int values[];
+} LUT;
+layout (binding = 50) buffer Dbg_1 {
+  uint offsetCounter;
+  uint pad0;
+  uint pad1;
+  uint pad2;
+  uint value0;
+  uint value1;
+  uint value2;
+  uint value3;
+  float value_f32_0;
+  float value_f32_1;
+  float value_f32_2;
+  float value_f32_3;
+} dbg;
+
+vec3 toVoxelPos(vec3 position) {
+  vec3 bbMin = vec3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
+  vec3 bbMax = vec3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
+  vec3 bbSize = (bbMax - bbMin);
+  float cubeSize = max(max(bbSize.x, bbSize.y), bbSize.z);
+  float gridSize = float(uniforms.gridSize);
+  float gx = ((gridSize * (position.x - uniforms.bbMin.x)) / cubeSize);
+  float gy = ((gridSize * (position.y - uniforms.bbMin.y)) / cubeSize);
+  float gz = ((gridSize * (position.z - uniforms.bbMin.z)) / cubeSize);
+  return vec3(gx, gy, gz);
+}
+
+uint toIndex1D(uint gridSize, vec3 voxelPos) {
+  uvec3 icoord = uvec3(voxelPos);
+  return ((icoord.x + (gridSize * icoord.y)) + ((gridSize * gridSize) * icoord.z));
+}
+
+vec3 loadPosition(uint vertexIndex) {
+  vec3 position = vec3(positions.values[((3u * vertexIndex) + 0u)], positions.values[((3u * vertexIndex) + 1u)], positions.values[((3u * vertexIndex) + 2u)]);
+  return position;
+}
+
+void doIgnore() {
+  uint g42 = uniforms.numTriangles;
+  uint kj6 = dbg.value1;
+  uint atomic_result = 0u;
+  InterlockedOr(counters.values[0], 0, atomic_result);
+  uint b53 = atomic_result;
+  uint rwg = indices.values[0];
+  float rb5 = positions.values[0];
+  int atomic_result_1 = 0;
+  InterlockedOr(LUT.values[0], 0, atomic_result_1);
+  int g55 = atomic_result_1;
+}
+
+struct tint_symbol_1 {
+  uvec3 GlobalInvocationID;
+};
+
+void main_count_inner(uvec3 GlobalInvocationID) {
+  uint triangleIndex = GlobalInvocationID.x;
+  if ((triangleIndex >= uniforms.numTriangles)) {
+    return;
+  }
+  doIgnore();
+  uint i0 = indices.values[((3u * triangleIndex) + 0u)];
+  uint i1 = indices.values[((3u * triangleIndex) + 1u)];
+  uint i2 = indices.values[((3u * triangleIndex) + 2u)];
+  vec3 p0 = loadPosition(i0);
+  vec3 p1 = loadPosition(i1);
+  vec3 p2 = loadPosition(i2);
+  vec3 center = (((p0 + p1) + p2) / 3.0f);
+  vec3 voxelPos = toVoxelPos(center);
+  uint voxelIndex = toIndex1D(uniforms.gridSize, voxelPos);
+  uint atomic_result_2 = 0u;
+  InterlockedAdd(counters.values[voxelIndex], 1u, atomic_result_2);
+  uint acefg = atomic_result_2;
+  if ((triangleIndex == 0u)) {
+    dbg.value0 = uniforms.gridSize;
+    dbg.value_f32_0 = center.x;
+    dbg.value_f32_1 = center.y;
+    dbg.value_f32_2 = center.z;
+  }
+}
+
+struct tint_symbol_3 {
+  uvec3 GlobalInvocationID;
+};
+struct tint_symbol_5 {
+  uvec3 GlobalInvocationID;
+};
+
+layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
+void main_count(tint_symbol_1 tint_symbol) {
+  main_count_inner(tint_symbol.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_1 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  main_count(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:66: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:66: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Uniforms_1 {
+  uint numTriangles;
+  uint gridSize;
+  uint pad1;
+  uint pad2;
+  vec3 bbMin;
+  vec3 bbMax;
+} uniforms;
+layout (binding = 10) buffer U32s_1 {
+  uint values[];
+} indices;
+layout (binding = 11) buffer F32s_1 {
+  float values[];
+} positions;
+layout (binding = 20) buffer AU32s_1 {
+  uint values[];
+} counters;
+layout (binding = 21) buffer AI32s_1 {
+  int values[];
+} LUT;
+layout (binding = 50) buffer Dbg_1 {
+  uint offsetCounter;
+  uint pad0;
+  uint pad1;
+  uint pad2;
+  uint value0;
+  uint value1;
+  uint value2;
+  uint value3;
+  float value_f32_0;
+  float value_f32_1;
+  float value_f32_2;
+  float value_f32_3;
+} dbg;
+
+void doIgnore() {
+  uint g42 = uniforms.numTriangles;
+  uint kj6 = dbg.value1;
+  uint atomic_result = 0u;
+  InterlockedOr(counters.values[0], 0, atomic_result);
+  uint b53 = atomic_result;
+  uint rwg = indices.values[0];
+  float rb5 = positions.values[0];
+  int atomic_result_1 = 0;
+  InterlockedOr(LUT.values[0], 0, atomic_result_1);
+  int g55 = atomic_result_1;
+}
+
+struct tint_symbol_1 {
+  uvec3 GlobalInvocationID;
+};
+struct tint_symbol_3 {
+  uvec3 GlobalInvocationID;
+};
+
+void main_create_lut_inner(uvec3 GlobalInvocationID) {
+  uint voxelIndex = GlobalInvocationID.x;
+  doIgnore();
+  uint maxVoxels = ((uniforms.gridSize * uniforms.gridSize) * uniforms.gridSize);
+  if ((voxelIndex >= maxVoxels)) {
+    return;
+  }
+  uint atomic_result_2 = 0u;
+  InterlockedOr(counters.values[voxelIndex], 0, atomic_result_2);
+  uint numTriangles = atomic_result_2;
+  int offset = -1;
+  if ((numTriangles > 0u)) {
+    uint atomic_result_3 = 0u;
+    InterlockedAdd(dbg.offsetCounter, numTriangles, atomic_result_3);
+    offset = int(atomic_result_3);
+  }
+  int atomic_result_4 = 0;
+  InterlockedExchange(LUT.values[voxelIndex], offset, atomic_result_4);
+}
+
+struct tint_symbol_5 {
+  uvec3 GlobalInvocationID;
+};
+
+layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
+void main_create_lut(tint_symbol_3 tint_symbol_2) {
+  main_create_lut_inner(tint_symbol_2.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_3 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  main_create_lut(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:44: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:44: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Uniforms_1 {
+  uint numTriangles;
+  uint gridSize;
+  uint pad1;
+  uint pad2;
+  vec3 bbMin;
+  vec3 bbMax;
+} uniforms;
+layout (binding = 10) buffer U32s_1 {
+  uint values[];
+} indices;
+layout (binding = 11) buffer F32s_1 {
+  float values[];
+} positions;
+layout (binding = 20) buffer AU32s_1 {
+  uint values[];
+} counters;
+layout (binding = 21) buffer AI32s_1 {
+  int values[];
+} LUT;
+layout (binding = 50) buffer Dbg_1 {
+  uint offsetCounter;
+  uint pad0;
+  uint pad1;
+  uint pad2;
+  uint value0;
+  uint value1;
+  uint value2;
+  uint value3;
+  float value_f32_0;
+  float value_f32_1;
+  float value_f32_2;
+  float value_f32_3;
+} dbg;
+
+vec3 toVoxelPos(vec3 position) {
+  vec3 bbMin = vec3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
+  vec3 bbMax = vec3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
+  vec3 bbSize = (bbMax - bbMin);
+  float cubeSize = max(max(bbSize.x, bbSize.y), bbSize.z);
+  float gridSize = float(uniforms.gridSize);
+  float gx = ((gridSize * (position.x - uniforms.bbMin.x)) / cubeSize);
+  float gy = ((gridSize * (position.y - uniforms.bbMin.y)) / cubeSize);
+  float gz = ((gridSize * (position.z - uniforms.bbMin.z)) / cubeSize);
+  return vec3(gx, gy, gz);
+}
+
+uint toIndex1D(uint gridSize, vec3 voxelPos) {
+  uvec3 icoord = uvec3(voxelPos);
+  return ((icoord.x + (gridSize * icoord.y)) + ((gridSize * gridSize) * icoord.z));
+}
+
+vec3 loadPosition(uint vertexIndex) {
+  vec3 position = vec3(positions.values[((3u * vertexIndex) + 0u)], positions.values[((3u * vertexIndex) + 1u)], positions.values[((3u * vertexIndex) + 2u)]);
+  return position;
+}
+
+void doIgnore() {
+  uint g42 = uniforms.numTriangles;
+  uint kj6 = dbg.value1;
+  uint atomic_result = 0u;
+  InterlockedOr(counters.values[0], 0, atomic_result);
+  uint b53 = atomic_result;
+  uint rwg = indices.values[0];
+  float rb5 = positions.values[0];
+  int atomic_result_1 = 0;
+  InterlockedOr(LUT.values[0], 0, atomic_result_1);
+  int g55 = atomic_result_1;
+}
+
+struct tint_symbol_1 {
+  uvec3 GlobalInvocationID;
+};
+struct tint_symbol_3 {
+  uvec3 GlobalInvocationID;
+};
+struct tint_symbol_5 {
+  uvec3 GlobalInvocationID;
+};
+
+void main_sort_triangles_inner(uvec3 GlobalInvocationID) {
+  uint triangleIndex = GlobalInvocationID.x;
+  doIgnore();
+  if ((triangleIndex >= uniforms.numTriangles)) {
+    return;
+  }
+  uint i0 = indices.values[((3u * triangleIndex) + 0u)];
+  uint i1 = indices.values[((3u * triangleIndex) + 1u)];
+  uint i2 = indices.values[((3u * triangleIndex) + 2u)];
+  vec3 p0 = loadPosition(i0);
+  vec3 p1 = loadPosition(i1);
+  vec3 p2 = loadPosition(i2);
+  vec3 center = (((p0 + p1) + p2) / 3.0f);
+  vec3 voxelPos = toVoxelPos(center);
+  uint voxelIndex = toIndex1D(uniforms.gridSize, voxelPos);
+  int atomic_result_2 = 0;
+  InterlockedAdd(LUT.values[voxelIndex], 1, atomic_result_2);
+  int triangleOffset = atomic_result_2;
+}
+
+layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
+void main_sort_triangles(tint_symbol_5 tint_symbol_4) {
+  main_sort_triangles_inner(tint_symbol_4.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_5 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  main_sort_triangles(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:66: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:66: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/1121.wgsl.expected.glsl b/test/bug/tint/1121.wgsl.expected.glsl
new file mode 100644
index 0000000..5dd520f
--- /dev/null
+++ b/test/bug/tint/1121.wgsl.expected.glsl
@@ -0,0 +1,146 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct LightData {
+  vec4 position;
+  vec3 color;
+  float radius;
+};
+
+layout (binding = 0) buffer LightsBuffer_1 {
+  LightData lights[];
+} lightsBuffer;
+
+struct TileLightIdData {
+  uint count;
+  uint lightId[64];
+};
+
+layout (binding = 0) buffer Tiles_1 {
+  TileLightIdData data[4];
+} tileLightId;
+
+layout (binding = 0) uniform Config_1 {
+  uint numLights;
+  uint numTiles;
+  uint tileCountX;
+  uint tileCountY;
+  uint numTileLightSlot;
+  uint tileSize;
+} config;
+
+layout (binding = 0) uniform Uniforms_1 {
+  vec4 tint_symbol;
+  vec4 tint_symbol_1;
+  mat4 viewMatrix;
+  mat4 projectionMatrix;
+  vec4 fullScreenSize;
+} uniforms;
+
+struct tint_symbol_4 {
+  uvec3 GlobalInvocationID;
+};
+
+void tint_symbol_2_inner(uvec3 GlobalInvocationID) {
+  uint index = GlobalInvocationID.x;
+  if ((index >= config.numLights)) {
+    return;
+  }
+  lightsBuffer.lights[index].position.y = ((lightsBuffer.lights[index].position.y - 0.100000001f) + (0.001f * (float(index) - (64.0f * floor((float(index) / 64.0f))))));
+  if ((lightsBuffer.lights[index].position.y < uniforms.tint_symbol.y)) {
+    lightsBuffer.lights[index].position.y = uniforms.tint_symbol_1.y;
+  }
+  mat4 M = uniforms.projectionMatrix;
+  float viewNear = (-(M[3][2]) / (-1.0f + M[2][2]));
+  float viewFar = (-(M[3][2]) / (1.0f + M[2][2]));
+  vec4 lightPos = lightsBuffer.lights[index].position;
+  lightPos = (uniforms.viewMatrix * lightPos);
+  lightPos = (lightPos / lightPos.w);
+  float lightRadius = lightsBuffer.lights[index].radius;
+  vec4 boxMin = (lightPos - vec4(vec3((lightRadius).xxx), 0.0f));
+  vec4 boxMax = (lightPos + vec4(vec3((lightRadius).xxx), 0.0f));
+  vec4 frustumPlanes[6] = vec4[6](vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  frustumPlanes[4] = vec4(0.0f, 0.0f, -1.0f, viewNear);
+  frustumPlanes[5] = vec4(0.0f, 0.0f, 1.0f, -(viewFar));
+  int TILE_SIZE = 16;
+  int TILE_COUNT_X = 2;
+  {
+    for(int y_1 = 0; (y_1 < 2); y_1 = (y_1 + 1)) {
+      {
+        for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = (x_1 + 1)) {
+          ivec2 tilePixel0Idx = ivec2((x_1 * TILE_SIZE), (y_1 * TILE_SIZE));
+          vec2 floorCoord = (((2.0f * vec2(tilePixel0Idx)) / uniforms.fullScreenSize.xy) - vec2((1.0f).xx));
+          vec2 ceilCoord = (((2.0f * vec2((tilePixel0Idx + ivec2((TILE_SIZE).xx)))) / uniforms.fullScreenSize.xy) - vec2((1.0f).xx));
+          vec2 viewFloorCoord = vec2((((-(viewNear) * floorCoord.x) - (M[2][0] * viewNear)) / M[0][0]), (((-(viewNear) * floorCoord.y) - (M[2][1] * viewNear)) / M[1][1]));
+          vec2 viewCeilCoord = vec2((((-(viewNear) * ceilCoord.x) - (M[2][0] * viewNear)) / M[0][0]), (((-(viewNear) * ceilCoord.y) - (M[2][1] * viewNear)) / M[1][1]));
+          frustumPlanes[0] = vec4(1.0f, 0.0f, (-(viewFloorCoord.x) / viewNear), 0.0f);
+          frustumPlanes[1] = vec4(-1.0f, 0.0f, (viewCeilCoord.x / viewNear), 0.0f);
+          frustumPlanes[2] = vec4(0.0f, 1.0f, (-(viewFloorCoord.y) / viewNear), 0.0f);
+          frustumPlanes[3] = vec4(0.0f, -1.0f, (viewCeilCoord.y / viewNear), 0.0f);
+          float dp = 0.0f;
+          {
+            for(uint i = 0u; (i < 6u); i = (i + 1u)) {
+              vec4 p = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+              if ((frustumPlanes[i].x > 0.0f)) {
+                p.x = boxMax.x;
+              } else {
+                p.x = boxMin.x;
+              }
+              if ((frustumPlanes[i].y > 0.0f)) {
+                p.y = boxMax.y;
+              } else {
+                p.y = boxMin.y;
+              }
+              if ((frustumPlanes[i].z > 0.0f)) {
+                p.z = boxMax.z;
+              } else {
+                p.z = boxMin.z;
+              }
+              p.w = 1.0f;
+              dp = (dp + min(0.0f, dot(p, frustumPlanes[i])));
+            }
+          }
+          if ((dp >= 0.0f)) {
+            uint tileId = uint((x_1 + (y_1 * TILE_COUNT_X)));
+            bool tint_tmp = (tileId < 0u);
+            if (!tint_tmp) {
+              tint_tmp = (tileId >= config.numTiles);
+            }
+            if ((tint_tmp)) {
+              continue;
+            }
+            uint atomic_result = 0u;
+            InterlockedAdd(tileLightId.data[tileId].count, 1u, atomic_result);
+            uint offset = atomic_result;
+            if ((offset >= config.numTileLightSlot)) {
+              continue;
+            }
+            tileLightId.data[tileId].lightId[offset] = GlobalInvocationID.x;
+          }
+        }
+      }
+    }
+  }
+}
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol_2(tint_symbol_4 tint_symbol_3) {
+  tint_symbol_2_inner(tint_symbol_3.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_4 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  tint_symbol_2(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:60: 'scalar swizzle' : not supported with this profile: es
+ERROR: 0:60: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/1136.wgsl.expected.glsl b/test/bug/tint/1136.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/1136.wgsl.expected.glsl
diff --git a/test/bug/tint/219.spvasm.expected.glsl b/test/bug/tint/219.spvasm.expected.glsl
new file mode 100644
index 0000000..2eeb7d1
--- /dev/null
+++ b/test/bug/tint/219.spvasm.expected.glsl
@@ -0,0 +1,24 @@
+#version 310 es
+precision mediump float;
+
+float x_200(inout vec2 x_201) {
+  float x_212 = x_201.x;
+  return x_212;
+}
+
+void main_1() {
+  vec2 x_11 = vec2(0.0f, 0.0f);
+  float x_12 = x_200(x_11);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/221.wgsl.expected.glsl b/test/bug/tint/221.wgsl.expected.glsl
new file mode 100644
index 0000000..a6e8124
--- /dev/null
+++ b/test/bug/tint/221.wgsl.expected.glsl
@@ -0,0 +1,37 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer Buf_1 {
+  uint count;
+  uint data[50];
+} b;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uint i = 0u;
+  while (true) {
+    if ((i >= b.count)) {
+      break;
+    }
+    uint p_save = i;
+    if (((i % 2u) == 0u)) {
+      {
+        b.data[p_save] = (b.data[p_save] * 2u);
+        i = (i + 1u);
+      }
+      continue;
+    }
+    b.data[p_save] = 0u;
+    {
+      b.data[p_save] = (b.data[p_save] * 2u);
+      i = (i + 1u);
+    }
+  }
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/292.wgsl.expected.glsl b/test/bug/tint/292.wgsl.expected.glsl
new file mode 100644
index 0000000..475e741
--- /dev/null
+++ b/test/bug/tint/292.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  vec3 light = vec3(1.200000048f, 1.0f, 2.0f);
+  vec3 negative_light = -(light);
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/bug/tint/294.wgsl.expected.glsl b/test/bug/tint/294.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/294.wgsl.expected.glsl
diff --git a/test/bug/tint/369.wgsl.expected.glsl b/test/bug/tint/369.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/369.wgsl.expected.glsl
diff --git a/test/bug/tint/403.wgsl.expected.glsl b/test/bug/tint/403.wgsl.expected.glsl
new file mode 100644
index 0000000..15c7fd4
--- /dev/null
+++ b/test/bug/tint/403.wgsl.expected.glsl
@@ -0,0 +1,55 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform vertexUniformBuffer1_1 {
+  mat2 transform1;
+} x_20;
+layout (binding = 0) uniform vertexUniformBuffer2_1 {
+  mat2 transform2;
+} x_26;
+
+struct tint_symbol_2 {
+  uint gl_VertexIndex;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(uint gl_VertexIndex) {
+  vec2 indexable[3] = vec2[3](vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+  mat2 x_23 = x_20.transform1;
+  mat2 x_28 = x_26.transform2;
+  uint x_46 = gl_VertexIndex;
+  vec2 tint_symbol_4[3] = vec2[3](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f));
+  indexable = tint_symbol_4;
+  vec2 x_51 = indexable[x_46];
+  vec2 x_52 = (mat2((x_23[0u] + x_28[0u]), (x_23[1u] + x_28[1u])) * x_51);
+  return vec4(x_52.x, x_52.y, 0.0f, 1.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  vec4 inner_result = tint_symbol_inner(tint_symbol_1.gl_VertexIndex);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.gl_VertexIndex = uint(gl_VertexID);
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:19: 'gl_VertexIndex' : identifiers starting with "gl_" are reserved 
+ERROR: 0:19: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/413.spvasm.expected.glsl b/test/bug/tint/413.spvasm.expected.glsl
new file mode 100644
index 0000000..c3dc7bc
--- /dev/null
+++ b/test/bug/tint/413.spvasm.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D Src;
+uniform highp writeonly image2D Dst;
+
+void main_1() {
+  uvec4 srcValue = uvec4(0u, 0u, 0u, 0u);
+  uvec4 x_18 = texelFetch(Src, ivec3(0, 0, 0));
+  srcValue = x_18;
+  uint x_22 = srcValue.x;
+  srcValue.x = (x_22 + uint(1));
+  imageStore(Dst, ivec2(0, 0), srcValue).x;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/453.wgsl.expected.glsl b/test/bug/tint/453.wgsl.expected.glsl
new file mode 100644
index 0000000..5eec44f
--- /dev/null
+++ b/test/bug/tint/453.wgsl.expected.glsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D Src;
+uniform highp writeonly image2D Dst;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uvec4 srcValue = uvec4(0u, 0u, 0u, 0u);
+  uvec4 x_22 = texelFetch(Src, ivec3(0, 0, 0));
+  srcValue = x_22;
+  uint x_24 = srcValue.x;
+  uint x_25 = (x_24 + 1u);
+  imageStore(Dst, ivec2(0, 0), srcValue.xxxx).x;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:10: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:10: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:10: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/492.wgsl.expected.glsl b/test/bug/tint/492.wgsl.expected.glsl
new file mode 100644
index 0000000..69f3063
--- /dev/null
+++ b/test/bug/tint/492.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a;
+} buf;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  buf.a = 12;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/534.wgsl.expected.glsl b/test/bug/tint/534.wgsl.expected.glsl
new file mode 100644
index 0000000..8a8429e
--- /dev/null
+++ b/test/bug/tint/534.wgsl.expected.glsl
@@ -0,0 +1,76 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+uniform highp sampler2D src;
+uniform highp sampler2D dst;
+layout (binding = 2) buffer OutputBuf_1 {
+  uint result[];
+} tint_symbol;
+layout (binding = 3) uniform Uniforms_1 {
+  uint dstTextureFlipY;
+  uint isFloat16;
+  uint isRGB10A2Unorm;
+  uint channelCount;
+} uniforms;
+
+uint ConvertToFp16FloatValue(float fp32) {
+  return 1u;
+}
+
+struct tint_symbol_3 {
+  uvec3 GlobalInvocationID;
+};
+
+void tint_symbol_1_inner(uvec3 GlobalInvocationID) {
+  ivec2 size = textureSize(src);
+  ivec2 dstTexCoord = ivec2(GlobalInvocationID.xy);
+  ivec2 srcTexCoord = dstTexCoord;
+  if ((uniforms.dstTextureFlipY == 1u)) {
+    srcTexCoord.y = ((size.y - dstTexCoord.y) - 1);
+  }
+  vec4 srcColor = texelFetch(src, ivec3(srcTexCoord, 0));
+  vec4 dstColor = texelFetch(dst, ivec3(dstTexCoord, 0));
+  bool success = true;
+  uvec4 srcColorBits = uvec4(0u, 0u, 0u, 0u);
+  uvec4 dstColorBits = uvec4(dstColor);
+  {
+    for(uint i = 0u; (i < uniforms.channelCount); i = (i + 1u)) {
+      srcColorBits[i] = ConvertToFp16FloatValue(srcColor[i]);
+      bool tint_tmp = success;
+      if (tint_tmp) {
+        tint_tmp = (srcColorBits[i] == dstColorBits[i]);
+      }
+      success = (tint_tmp);
+    }
+  }
+  uint outputIndex = ((GlobalInvocationID.y * uint(size.x)) + GlobalInvocationID.x);
+  if (success) {
+    tint_symbol.result[outputIndex] = uint(1);
+  } else {
+    tint_symbol.result[outputIndex] = uint(0);
+  }
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  tint_symbol_1_inner(tint_symbol_2.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_3 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  tint_symbol_1(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:26: 'textureSize' : no matching overloaded function found 
+ERROR: 0:26: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:26: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/744.wgsl.expected.glsl b/test/bug/tint/744.wgsl.expected.glsl
new file mode 100644
index 0000000..e8890c4
--- /dev/null
+++ b/test/bug/tint/744.wgsl.expected.glsl
@@ -0,0 +1,51 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer Matrix_1 {
+  uint numbers[];
+} firstMatrix;
+layout (binding = 1) buffer Matrix_2 {
+  uint numbers[];
+} secondMatrix;
+layout (binding = 2) buffer Matrix_3 {
+  uint numbers[];
+} resultMatrix;
+layout (binding = 3) uniform Uniforms_1 {
+  uvec2 aShape;
+  uvec2 bShape;
+  uvec2 outShape;
+} uniforms;
+
+struct tint_symbol_2 {
+  uvec3 global_id;
+};
+
+void tint_symbol_inner(uvec3 global_id) {
+  uvec2 resultCell = uvec2(global_id.y, global_id.x);
+  uint dimInner = uniforms.aShape.y;
+  uint dimOutter = uniforms.outShape.y;
+  uint result = 0u;
+  {
+    for(uint i = 0u; (i < dimInner); i = (i + 1u)) {
+      uint a = (i + (resultCell.x * dimInner));
+      uint b = (resultCell.y + (i * dimOutter));
+      result = (result + (firstMatrix.numbers[a] * secondMatrix.numbers[b]));
+    }
+  }
+  uint index = (resultCell.y + (resultCell.x * dimOutter));
+  resultMatrix.numbers[index] = result;
+}
+
+layout(local_size_x = 2, local_size_y = 2, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.global_id);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.global_id = gl_GlobalInvocationID;
+  tint_symbol(inputs);
+}
+
+
diff --git a/test/bug/tint/749.spvasm.expected.glsl b/test/bug/tint/749.spvasm.expected.glsl
new file mode 100644
index 0000000..f58102f
--- /dev/null
+++ b/test/bug/tint/749.spvasm.expected.glsl
@@ -0,0 +1,1584 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct QuicksortObject {
+  int numbers[10];
+};
+
+QuicksortObject obj = QuicksortObject(int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+layout (binding = 0) uniform buf0_1 {
+  vec2 resolution;
+} x_188;
+vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void swap_i1_i1_(inout int i, inout int j) {
+  int temp = 0;
+  int x_932 = temp;
+  temp = 0;
+  temp = x_932;
+  vec3 x_523 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
+  int x_933 = i;
+  i = 0;
+  i = x_933;
+  int x_28 = i;
+  int x_934 = j;
+  j = 0;
+  j = x_934;
+  vec3 x_524 = vec3(x_523.y, x_523.x, x_523.y);
+  int x_935 = temp;
+  temp = 0;
+  temp = x_935;
+  int x_30_save = x_28;
+  int x_936 = obj.numbers[x_30_save];
+  obj.numbers[x_30_save] = 0;
+  obj.numbers[x_30_save] = x_936;
+  int x_31 = obj.numbers[x_30_save];
+  int x_937 = temp;
+  temp = 0;
+  temp = x_937;
+  temp = x_31;
+  int x_938 = j;
+  j = 0;
+  j = x_938;
+  vec3 x_525 = vec3(x_523.z, vec3(1.0f, 2.0f, 3.0f).x, x_523.y);
+  int x_939 = i;
+  i = 0;
+  i = x_939;
+  int x_32 = i;
+  int x_940 = obj.numbers[x_30_save];
+  obj.numbers[x_30_save] = 0;
+  obj.numbers[x_30_save] = x_940;
+  int x_33 = j;
+  int x_941 = i;
+  i = 0;
+  i = x_941;
+  vec3 x_526 = vec3(x_525.x, x_525.z, x_525.z);
+  int x_942 = obj.numbers[x_30_save];
+  obj.numbers[x_30_save] = 0;
+  obj.numbers[x_30_save] = x_942;
+  int x_34_save = x_33;
+  int x_35 = obj.numbers[x_34_save];
+  QuicksortObject x_943 = obj;
+  int tint_symbol_5[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_6 = QuicksortObject(tint_symbol_5);
+  obj = tint_symbol_6;
+  obj = x_943;
+  vec2 x_527 = vec2(x_526.x, x_526.x);
+  int x_36_save = x_32;
+  vec3 x_528 = vec3(x_524.x, x_524.z, x_524.x);
+  obj.numbers[x_36_save] = x_35;
+  QuicksortObject x_944 = obj;
+  int tint_symbol_7[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_8 = QuicksortObject(tint_symbol_7);
+  obj = tint_symbol_8;
+  obj = x_944;
+  vec3 x_529 = vec3(x_526.y, x_526.z, x_526.x);
+  int x_945 = i;
+  i = 0;
+  i = x_945;
+  int x_37 = j;
+  int x_946 = temp;
+  temp = 0;
+  temp = x_946;
+  vec2 x_530 = vec2(x_529.z, x_529.y);
+  int x_947 = obj.numbers[x_34_save];
+  obj.numbers[x_34_save] = 0;
+  obj.numbers[x_34_save] = x_947;
+  int x_38 = temp;
+  int x_948 = j;
+  j = 0;
+  j = x_948;
+  vec3 x_531 = vec3(x_527.x, x_526.y, x_526.x);
+  int x_949 = obj.numbers[x_36_save];
+  obj.numbers[x_36_save] = 0;
+  obj.numbers[x_36_save] = x_949;
+  QuicksortObject x_950 = obj;
+  int tint_symbol_9[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_10 = QuicksortObject(tint_symbol_9);
+  obj = tint_symbol_10;
+  obj = x_950;
+  vec3 x_532 = vec3(x_528.x, x_528.y, x_528.x);
+  int x_951 = obj.numbers[x_34_save];
+  obj.numbers[x_34_save] = 0;
+  obj.numbers[x_34_save] = x_951;
+  obj.numbers[x_37] = x_38;
+  return;
+}
+
+int performPartition_i1_i1_(inout int l, inout int h) {
+  int param_3 = 0;
+  int i_1 = 0;
+  int j_1 = 0;
+  int param_2 = 0;
+  int param_1 = 0;
+  int param = 0;
+  int pivot = 0;
+  vec2 x_537 = vec2(0.0f, 0.0f);
+  vec3 x_538 = vec3(0.0f, 0.0f, 0.0f);
+  int x_952 = h;
+  h = 0;
+  h = x_952;
+  int x_41 = h;
+  int x_953 = l;
+  l = 0;
+  l = x_953;
+  int x_42_save = x_41;
+  int x_954 = obj.numbers[x_42_save];
+  obj.numbers[x_42_save] = 0;
+  obj.numbers[x_42_save] = x_954;
+  int x_43 = obj.numbers[x_42_save];
+  int x_955 = param_3;
+  param_3 = 0;
+  param_3 = x_955;
+  vec3 x_534 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).z);
+  int x_956 = param_1;
+  param_1 = 0;
+  param_1 = x_956;
+  pivot = x_43;
+  int x_45 = l;
+  int x_957 = h;
+  h = 0;
+  h = x_957;
+  int x_958 = j_1;
+  j_1 = 0;
+  j_1 = x_958;
+  vec3 x_535 = vec3(x_534.y, x_534.z, x_534.y);
+  int x_959 = l;
+  l = 0;
+  l = x_959;
+  i_1 = (x_45 - int(1u));
+  int x_49 = l;
+  vec3 x_536 = vec3(x_534.x, x_534.z, x_535.x);
+  j_1 = 10;
+  QuicksortObject x_960 = obj;
+  int tint_symbol_11[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_12 = QuicksortObject(tint_symbol_11);
+  obj = tint_symbol_12;
+  obj = x_960;
+  while (true) {
+    int x_961 = pivot;
+    pivot = 0;
+    pivot = x_961;
+    int x_962 = param_1;
+    param_1 = 0;
+    param_1 = x_962;
+    int x_55 = j_1;
+    int x_963 = pivot;
+    pivot = 0;
+    pivot = x_963;
+    x_537 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
+    QuicksortObject x_964 = obj;
+    int tint_symbol_13[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_14 = QuicksortObject(tint_symbol_13);
+    obj = tint_symbol_14;
+    obj = x_964;
+    int x_56 = h;
+    int x_965 = h;
+    h = 0;
+    h = x_965;
+    int x_966 = param;
+    param = 0;
+    param = x_966;
+    int x_967 = j_1;
+    j_1 = 0;
+    j_1 = x_967;
+    x_538 = vec3(x_534.x, x_537.y, x_534.z);
+    int x_968 = param;
+    param = 0;
+    param = x_968;
+    if ((x_55 <= (x_56 - int(1u)))) {
+    } else {
+      break;
+    }
+    int x_60 = j_1;
+    int x_969 = obj.numbers[x_42_save];
+    obj.numbers[x_42_save] = 0;
+    obj.numbers[x_42_save] = x_969;
+    int x_61_save = x_60;
+    int x_970 = h;
+    h = 0;
+    h = x_970;
+    vec3 x_539 = vec3(x_537.x, x_535.z, x_537.x);
+    int x_971 = param_1;
+    param_1 = 0;
+    param_1 = x_971;
+    int x_62 = obj.numbers[x_61_save];
+    QuicksortObject x_972 = obj;
+    int tint_symbol_15[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_16 = QuicksortObject(tint_symbol_15);
+    obj = tint_symbol_16;
+    obj = x_972;
+    int x_63 = pivot;
+    vec2 x_540 = vec2(vec3(1.0f, 2.0f, 3.0f).y, x_534.z);
+    int x_973 = i_1;
+    i_1 = 0;
+    i_1 = x_973;
+    int x_974 = l;
+    l = 0;
+    l = x_974;
+    vec3 x_541 = vec3(x_534.y, x_534.x, x_534.y);
+    int x_975 = pivot;
+    pivot = 0;
+    pivot = x_975;
+    if ((x_62 <= x_63)) {
+      vec3 x_542 = vec3(x_541.z, x_541.x, x_541.x);
+      int x_976 = param_3;
+      param_3 = 0;
+      param_3 = x_976;
+      int x_67 = i_1;
+      int x_977 = pivot;
+      pivot = 0;
+      pivot = x_977;
+      vec2 x_543 = vec2(x_539.x, x_541.y);
+      int x_978 = i_1;
+      i_1 = 0;
+      i_1 = x_978;
+      int x_979 = param;
+      param = 0;
+      param = x_979;
+      i_1 = (x_67 + int(1u));
+      int x_980 = l;
+      l = 0;
+      l = x_980;
+      vec3 x_544 = vec3(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y, x_540.x);
+      int x_70 = i_1;
+      vec2 x_545 = vec2(x_537.y, x_538.x);
+      int x_981 = param;
+      param = 0;
+      param = x_981;
+      param = x_70;
+      int x_982 = param;
+      param = 0;
+      param = x_982;
+      vec2 x_546 = vec2(x_545.x, x_545.x);
+      int x_983 = i_1;
+      i_1 = 0;
+      i_1 = x_983;
+      param_1 = j_1;
+      int x_984 = param_3;
+      param_3 = 0;
+      param_3 = x_984;
+      swap_i1_i1_(param, param_1);
+      int x_985 = param_1;
+      param_1 = 0;
+      param_1 = x_985;
+    }
+    QuicksortObject x_986 = obj;
+    int tint_symbol_17[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_18 = QuicksortObject(tint_symbol_17);
+    obj = tint_symbol_18;
+    obj = x_986;
+    {
+      int x_987 = h;
+      h = 0;
+      h = x_987;
+      int x_74 = j_1;
+      int x_988 = h;
+      h = 0;
+      h = x_988;
+      vec3 x_547 = vec3(x_539.x, x_541.z, x_541.z);
+      int x_989 = obj.numbers[x_61_save];
+      obj.numbers[x_61_save] = 0;
+      obj.numbers[x_61_save] = x_989;
+      int x_990 = param;
+      param = 0;
+      param = x_990;
+      j_1 = (1 + x_74);
+      int x_991 = param_1;
+      param_1 = 0;
+      param_1 = x_991;
+      vec3 x_548 = vec3(x_541.y, x_541.z, x_541.x);
+      int x_992 = obj.numbers[x_61_save];
+      obj.numbers[x_61_save] = 0;
+      obj.numbers[x_61_save] = x_992;
+    }
+  }
+  int x_76 = i_1;
+  int x_993 = obj.numbers[x_42_save];
+  obj.numbers[x_42_save] = 0;
+  obj.numbers[x_42_save] = x_993;
+  vec2 x_549 = vec2(x_534.x, x_534.y);
+  QuicksortObject x_994 = obj;
+  int tint_symbol_19[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_20 = QuicksortObject(tint_symbol_19);
+  obj = tint_symbol_20;
+  obj = x_994;
+  int x_995 = h;
+  h = 0;
+  h = x_995;
+  i_1 = (1 + x_76);
+  int x_996 = param_1;
+  param_1 = 0;
+  param_1 = x_996;
+  int x_79 = i_1;
+  int x_997 = j_1;
+  j_1 = 0;
+  j_1 = x_997;
+  vec2 x_550 = vec2(x_534.x, x_534.x);
+  int x_998 = param_1;
+  param_1 = 0;
+  param_1 = x_998;
+  param_2 = x_79;
+  vec2 x_551 = vec2(x_534.y, x_536.x);
+  int x_999 = pivot;
+  pivot = 0;
+  pivot = x_999;
+  int x_81 = h;
+  vec2 x_552 = vec2(x_550.x, x_549.y);
+  int x_1000 = h;
+  h = 0;
+  h = x_1000;
+  param_3 = x_81;
+  int x_1001 = i_1;
+  i_1 = 0;
+  i_1 = x_1001;
+  vec2 x_553 = vec2(x_549.y, x_552.x);
+  int x_1002 = h;
+  h = 0;
+  h = x_1002;
+  swap_i1_i1_(param_2, param_3);
+  int x_1003 = l;
+  l = 0;
+  l = x_1003;
+  vec2 x_554 = vec2(x_536.z, vec3(1.0f, 2.0f, 3.0f).y);
+  int x_1004 = param_1;
+  param_1 = 0;
+  param_1 = x_1004;
+  int x_83 = i_1;
+  int x_1005 = param;
+  param = 0;
+  param = x_1005;
+  vec2 x_555 = vec2(x_534.y, x_534.x);
+  int x_1006 = j_1;
+  j_1 = 0;
+  j_1 = x_1006;
+  return x_83;
+}
+
+void quicksort_() {
+  int param_4 = 0;
+  int h_1 = 0;
+  int p = 0;
+  int l_1 = 0;
+  int top = 0;
+  int stack[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  int param_5 = 0;
+  l_1 = 0;
+  int x_1007 = param_5;
+  param_5 = 0;
+  param_5 = x_1007;
+  h_1 = 9;
+  int x_1008[10] = stack;
+  int tint_symbol_21[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  stack = tint_symbol_21;
+  stack = x_1008;
+  vec2 x_556 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).y);
+  int x_1009 = param_5;
+  param_5 = 0;
+  param_5 = x_1009;
+  top = -1;
+  int x_1010 = p;
+  p = 0;
+  p = x_1010;
+  int x_93 = top;
+  vec2 x_557 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).x);
+  int x_1011 = p;
+  p = 0;
+  p = x_1011;
+  int x_94 = (x_93 + int(1u));
+  int x_1012 = top;
+  top = 0;
+  top = x_1012;
+  vec2 x_558 = vec2(x_556.y, x_557.y);
+  int x_1013 = param_4;
+  param_4 = 0;
+  param_4 = x_1013;
+  top = x_94;
+  int x_1014 = h_1;
+  h_1 = 0;
+  h_1 = x_1014;
+  vec3 x_559 = vec3(x_557.y, x_557.x, x_557.x);
+  int x_1015 = param_4;
+  param_4 = 0;
+  param_4 = x_1015;
+  int x_95 = l_1;
+  QuicksortObject x_1016 = obj;
+  int tint_symbol_22[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_23 = QuicksortObject(tint_symbol_22);
+  obj = tint_symbol_23;
+  obj = x_1016;
+  vec3 x_560 = vec3(x_559.y, x_559.x, x_557.x);
+  int x_96_save = x_94;
+  int x_1017[10] = stack;
+  int tint_symbol_24[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  stack = tint_symbol_24;
+  stack = x_1017;
+  vec3 x_561 = vec3(x_556.y, x_556.y, x_556.y);
+  int x_1018 = l_1;
+  l_1 = 0;
+  l_1 = 0;
+  stack[x_96_save] = x_95;
+  int x_1019 = param_5;
+  param_5 = 0;
+  param_5 = x_1019;
+  int x_97 = top;
+  int x_1020 = param_4;
+  param_4 = 0;
+  param_4 = x_1020;
+  vec3 x_562 = vec3(vec3(1.0f, 2.0f, 3.0f).z, x_558.y, vec3(1.0f, 2.0f, 3.0f).y);
+  int x_1021 = stack[x_96_save];
+  stack[x_96_save] = 0;
+  stack[x_96_save] = x_1021;
+  int x_98 = (x_97 + 1);
+  int x_1022 = stack[x_96_save];
+  stack[x_96_save] = 0;
+  stack[x_96_save] = x_1022;
+  vec3 x_563 = vec3(x_559.x, x_559.z, x_556.y);
+  top = x_98;
+  int x_1023 = param_4;
+  param_4 = 0;
+  param_4 = x_1023;
+  int x_99 = h_1;
+  int x_1024 = param_4;
+  param_4 = 0;
+  param_4 = x_1024;
+  vec3 x_564 = vec3(x_558.x, x_561.x, x_558.y);
+  int x_1025 = l_1;
+  l_1 = 0;
+  l_1 = x_1025;
+  int x_100_save = x_98;
+  int x_1026 = param_5;
+  param_5 = 0;
+  param_5 = x_1026;
+  vec2 x_565 = vec2(x_564.z, x_564.z);
+  int x_1027 = p;
+  p = 0;
+  p = x_1027;
+  stack[x_100_save] = x_99;
+  while (true) {
+    vec3 x_566 = vec3(x_563.x, x_563.x, x_563.x);
+    int x_1028 = h_1;
+    h_1 = 0;
+    h_1 = x_1028;
+    int x_1029[10] = stack;
+    int tint_symbol_25[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    stack = tint_symbol_25;
+    stack = x_1029;
+    int x_106 = top;
+    int x_1030[10] = stack;
+    int tint_symbol_26[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    stack = tint_symbol_26;
+    stack = x_1030;
+    vec2 x_567 = vec2(x_558.x, x_564.z);
+    int x_1031 = param_4;
+    param_4 = 0;
+    param_4 = x_1031;
+    if ((x_106 >= int(0u))) {
+    } else {
+      break;
+    }
+    QuicksortObject x_1032 = obj;
+    int tint_symbol_27[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_28 = QuicksortObject(tint_symbol_27);
+    obj = tint_symbol_28;
+    obj = x_1032;
+    vec3 x_568 = vec3(x_559.y, x_559.x, x_563.y);
+    int x_1033 = param_4;
+    param_4 = 0;
+    param_4 = x_1033;
+    int x_108 = top;
+    vec3 x_569 = vec3(x_565.x, x_567.y, x_565.x);
+    int x_1034 = h_1;
+    h_1 = 0;
+    h_1 = x_1034;
+    vec2 x_570 = vec2(x_556.x, x_556.x);
+    int x_1035 = p;
+    p = 0;
+    p = x_1035;
+    top = (x_108 - int(1u));
+    int x_1036 = p;
+    p = 0;
+    p = x_1036;
+    int x_110_save = x_108;
+    int x_1037 = stack[x_96_save];
+    stack[x_96_save] = 0;
+    stack[x_96_save] = x_1037;
+    int x_111 = stack[x_110_save];
+    int x_1038[10] = stack;
+    int tint_symbol_29[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    stack = tint_symbol_29;
+    stack = x_1038;
+    vec3 x_571 = vec3(x_559.y, x_559.x, x_564.y);
+    int x_1039 = l_1;
+    l_1 = 0;
+    l_1 = x_1039;
+    h_1 = x_111;
+    int x_1040[10] = stack;
+    int tint_symbol_30[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    stack = tint_symbol_30;
+    stack = x_1040;
+    vec2 x_572 = vec2(x_562.y, x_561.y);
+    int x_1041 = p;
+    p = 0;
+    p = x_1041;
+    int x_112 = top;
+    int x_1042 = param_4;
+    param_4 = 0;
+    param_4 = x_1042;
+    int x_1043 = stack[x_100_save];
+    stack[x_100_save] = 0;
+    stack[x_100_save] = x_1043;
+    vec2 x_573 = vec2(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).z);
+    top = (x_112 - 1);
+    int x_1044 = param_5;
+    param_5 = 0;
+    param_5 = x_1044;
+    vec3 x_574 = vec3(x_570.y, x_565.x, x_570.y);
+    int x_1045 = h_1;
+    h_1 = 0;
+    h_1 = x_1045;
+    int x_114_save = x_112;
+    vec2 x_575 = vec2(x_564.y, x_564.z);
+    int x_1046 = stack[x_100_save];
+    stack[x_100_save] = 0;
+    stack[x_100_save] = x_1046;
+    int x_115 = stack[x_114_save];
+    int x_1047 = p;
+    p = 0;
+    p = x_1047;
+    vec3 x_576 = vec3(x_573.y, x_573.y, x_565.x);
+    int x_1048 = param_5;
+    param_5 = 0;
+    param_5 = x_1048;
+    l_1 = x_115;
+    int x_1049 = top;
+    top = 0;
+    top = x_1049;
+    param_4 = l_1;
+    int x_1050 = stack[x_110_save];
+    stack[x_110_save] = 0;
+    stack[x_110_save] = x_1050;
+    vec2 x_577 = vec2(x_569.y, x_569.z);
+    int x_120 = h_1;
+    vec2 x_578 = vec2(x_558.x, vec3(1.0f, 2.0f, 3.0f).y);
+    param_5 = x_120;
+    int x_1051 = stack[x_100_save];
+    stack[x_100_save] = 0;
+    stack[x_100_save] = x_1051;
+    int x_121 = performPartition_i1_i1_(param_4, param_5);
+    vec2 x_579 = vec2(x_567.x, x_568.x);
+    int x_1052 = param_5;
+    param_5 = 0;
+    param_5 = x_1052;
+    p = x_121;
+    int x_1053 = param_4;
+    param_4 = 0;
+    param_4 = x_1053;
+    int x_122 = p;
+    int x_1054 = h_1;
+    h_1 = 0;
+    h_1 = x_1054;
+    vec2 x_580 = vec2(x_568.y, x_568.y);
+    int x_1055 = l_1;
+    l_1 = 0;
+    l_1 = x_1055;
+    int x_1056 = h_1;
+    h_1 = 0;
+    h_1 = x_1056;
+    int x_124 = l_1;
+    int x_1057 = stack[x_110_save];
+    stack[x_110_save] = 0;
+    stack[x_110_save] = x_1057;
+    int x_1058 = h_1;
+    h_1 = 0;
+    h_1 = x_1058;
+    vec2 x_582 = vec2(x_567.y, x_573.x);
+    int x_1059 = stack[x_100_save];
+    stack[x_100_save] = 0;
+    stack[x_100_save] = x_1059;
+    if (((x_122 - int(1u)) > x_124)) {
+      int x_1060 = param_4;
+      param_4 = 0;
+      param_4 = x_1060;
+      int x_128 = top;
+      vec2 x_583 = vec2(x_571.y, x_556.y);
+      int x_1061 = stack[x_100_save];
+      stack[x_100_save] = 0;
+      stack[x_100_save] = x_1061;
+      int x_1062[10] = stack;
+      int tint_symbol_31[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+      stack = tint_symbol_31;
+      stack = x_1062;
+      vec2 x_584 = vec2(x_569.z, x_569.y);
+      vec3 x_585 = vec3(x_580.y, x_577.x, x_577.x);
+      int x_130 = l_1;
+      int x_1063 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1063;
+      vec2 x_586 = vec2(x_564.x, x_585.x);
+      int x_1064 = param_5;
+      param_5 = 0;
+      param_5 = x_1064;
+      int x_131_save = (1 + x_128);
+      int x_1065 = stack[x_110_save];
+      stack[x_110_save] = 0;
+      stack[x_110_save] = x_1065;
+      vec3 x_587 = vec3(x_566.y, x_566.y, x_563.x);
+      int x_1066 = param_5;
+      param_5 = 0;
+      param_5 = x_1066;
+      stack[x_131_save] = x_130;
+      int x_132 = top;
+      int x_1067 = stack[x_100_save];
+      stack[x_100_save] = 0;
+      stack[x_100_save] = x_1067;
+      vec2 x_588 = vec2(x_575.y, x_575.x);
+      int x_1068 = stack[x_131_save];
+      stack[x_131_save] = 0;
+      stack[x_131_save] = x_1068;
+      int x_133 = int((1u + uint(x_132)));
+      int x_1069 = stack[x_100_save];
+      stack[x_100_save] = 0;
+      stack[x_100_save] = x_1069;
+      vec3 x_589 = vec3(x_576.z, x_588.y, x_576.z);
+      int x_1070 = h_1;
+      h_1 = 0;
+      h_1 = x_1070;
+      top = x_133;
+      int x_1071[10] = stack;
+      int tint_symbol_32[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+      stack = tint_symbol_32;
+      stack = x_1071;
+      int x_134 = p;
+      vec2 x_590 = vec2(x_576.x, x_573.y);
+      int x_1072 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1072;
+      int x_136_save = x_133;
+      int x_1073 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1073;
+      stack[x_136_save] = (x_134 - int(1u));
+      int x_1074 = stack[x_96_save];
+      stack[x_96_save] = 0;
+      stack[x_96_save] = x_1074;
+      vec2 x_591 = vec2(x_569.z, x_569.y);
+      int x_1075 = stack[x_136_save];
+      stack[x_136_save] = 0;
+      stack[x_136_save] = x_1075;
+    }
+    int x_1076 = stack[x_96_save];
+    stack[x_96_save] = 0;
+    stack[x_96_save] = x_1076;
+    vec2 x_592 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).y);
+    QuicksortObject x_1077 = obj;
+    int tint_symbol_33[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_34 = QuicksortObject(tint_symbol_33);
+    obj = tint_symbol_34;
+    obj = x_1077;
+    int x_137 = p;
+    int x_1078 = stack[x_114_save];
+    stack[x_114_save] = 0;
+    stack[x_114_save] = x_1078;
+    vec3 x_593 = vec3(x_571.z, x_556.x, x_556.y);
+    int x_1079 = p;
+    p = 0;
+    p = x_1079;
+    vec3 x_594 = vec3(x_563.z, x_563.x, x_575.x);
+    int x_1080 = stack[x_114_save];
+    stack[x_114_save] = 0;
+    stack[x_114_save] = x_1080;
+    int x_139 = h_1;
+    int x_1081 = top;
+    top = 0;
+    top = x_1081;
+    vec3 x_595 = vec3(x_560.z, x_568.x, x_560.x);
+    int x_1082 = stack[x_100_save];
+    stack[x_100_save] = 0;
+    stack[x_100_save] = x_1082;
+    int x_1083 = p;
+    p = 0;
+    p = x_1083;
+    if ((int((1u + uint(x_137))) < x_139)) {
+      int x_1084 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1084;
+      vec2 x_596 = vec2(x_592.y, x_582.x);
+      int x_1085 = l_1;
+      l_1 = 0;
+      l_1 = x_1085;
+      int x_143 = top;
+      int x_1086 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1086;
+      vec3 x_597 = vec3(x_562.y, x_560.y, x_560.y);
+      int x_144 = (x_143 + 1);
+      int x_1087 = param_5;
+      param_5 = 0;
+      param_5 = x_1087;
+      top = x_144;
+      int x_1088 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1088;
+      int x_145 = p;
+      int x_1089 = param_5;
+      param_5 = 0;
+      param_5 = x_1089;
+      vec3 x_599 = vec3(x_560.z, x_560.x, x_568.x);
+      int x_1090 = p;
+      p = 0;
+      p = x_1090;
+      vec3 x_600 = vec3(x_556.x, x_580.x, x_580.x);
+      int x_1091 = stack[x_100_save];
+      stack[x_100_save] = 0;
+      stack[x_100_save] = x_1091;
+      int x_147_save = x_144;
+      int x_1092 = stack[x_110_save];
+      stack[x_110_save] = 0;
+      stack[x_110_save] = x_1092;
+      vec2 x_601 = vec2(x_563.x, x_563.y);
+      stack[x_147_save] = int((1u + uint(x_145)));
+      int x_1093[10] = stack;
+      int tint_symbol_35[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+      stack = tint_symbol_35;
+      stack = x_1093;
+      int x_148 = top;
+      int x_1094 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1094;
+      vec2 x_602 = vec2(x_565.y, x_599.y);
+      int x_1095[10] = stack;
+      int tint_symbol_36[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+      stack = tint_symbol_36;
+      stack = x_1095;
+      int x_149 = (x_148 + int(1u));
+      int x_1096 = stack[x_147_save];
+      stack[x_147_save] = 0;
+      stack[x_147_save] = x_1096;
+      top = x_149;
+      int x_1097 = param_4;
+      param_4 = 0;
+      param_4 = x_1097;
+      int x_150 = h_1;
+      int x_1098 = stack[x_100_save];
+      stack[x_100_save] = 0;
+      stack[x_100_save] = x_1098;
+      int x_1099 = stack[x_96_save];
+      stack[x_96_save] = 0;
+      stack[x_96_save] = x_1099;
+      stack[x_149] = x_150;
+      int x_1100 = stack[x_114_save];
+      stack[x_114_save] = 0;
+      stack[x_114_save] = x_1100;
+      vec3 x_603 = vec3(x_568.y, x_564.x, x_564.x);
+      int x_1101 = l_1;
+      l_1 = 0;
+      l_1 = x_1101;
+    }
+    int x_1102 = stack[x_100_save];
+    stack[x_100_save] = 0;
+    stack[x_100_save] = x_1102;
+    {
+      int x_1103 = l_1;
+      l_1 = 0;
+      l_1 = x_1103;
+      vec2 x_604 = vec2(x_563.z, x_564.x);
+      QuicksortObject x_1104 = obj;
+      int tint_symbol_37[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+      QuicksortObject tint_symbol_38 = QuicksortObject(tint_symbol_37);
+      obj = tint_symbol_38;
+      obj = x_1104;
+    }
+  }
+  int x_1105 = h_1;
+  h_1 = 0;
+  h_1 = x_1105;
+  return;
+}
+
+void main_1() {
+  vec3 color = vec3(0.0f, 0.0f, 0.0f);
+  int i_2 = 0;
+  vec2 uv = vec2(0.0f, 0.0f);
+  vec2 x_717 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_717;
+  i_2 = 0;
+  QuicksortObject x_721 = obj;
+  int tint_symbol_39[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_40 = QuicksortObject(tint_symbol_39);
+  obj = tint_symbol_40;
+  obj = x_721;
+  if (true) {
+    QuicksortObject x_722 = obj;
+    int tint_symbol_41[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_42 = QuicksortObject(tint_symbol_41);
+    obj = tint_symbol_42;
+    obj = x_722;
+    vec2 x_431 = vec2(vec3(1.0f, 2.0f, 3.0f).x, vec3(1.0f, 2.0f, 3.0f).x);
+    int x_158 = i_2;
+    vec2 x_723 = uv;
+    uv = vec2(0.0f, 0.0f);
+    uv = x_723;
+    vec3 x_725 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_725;
+    vec2 x_432 = vec2(x_431.y, x_431.y);
+    QuicksortObject x_726 = obj;
+    int tint_symbol_43[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_44 = QuicksortObject(tint_symbol_43);
+    obj = tint_symbol_44;
+    obj = x_726;
+  }
+  QuicksortObject x_756 = obj;
+  int tint_symbol_45[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_46 = QuicksortObject(tint_symbol_45);
+  obj = tint_symbol_46;
+  obj = x_756;
+  vec2 x_446 = vec2(vec2(0.0f, 0.0f).x, vec2(0.0f, 0.0f).x);
+  int x_757 = i_2;
+  i_2 = 0;
+  i_2 = x_757;
+  quicksort_();
+  QuicksortObject x_758 = obj;
+  int tint_symbol_47[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_48 = QuicksortObject(tint_symbol_47);
+  obj = tint_symbol_48;
+  obj = x_758;
+  vec4 x_184 = tint_symbol;
+  vec2 x_759 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_759;
+  vec2 x_447 = vec2(vec2(0.0f, 0.0f).y, vec2(0.0f, 0.0f).y);
+  vec2 x_760 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_760;
+  vec2 x_185 = vec2(x_184.x, x_184.y);
+  vec3 x_448 = vec3(x_185.y, x_446.y, x_446.y);
+  QuicksortObject x_761 = obj;
+  int tint_symbol_49[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_50 = QuicksortObject(tint_symbol_49);
+  obj = tint_symbol_50;
+  obj = x_761;
+  vec2 x_762 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_762;
+  vec2 x_191 = x_188.resolution;
+  QuicksortObject x_763 = obj;
+  int tint_symbol_51[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_52 = QuicksortObject(tint_symbol_51);
+  obj = tint_symbol_52;
+  obj = x_763;
+  vec3 x_449 = vec3(x_184.y, vec3(1.0f, 2.0f, 3.0f).z, x_184.w);
+  vec3 x_764 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  color = x_764;
+  vec2 x_192 = (x_185 / x_191);
+  QuicksortObject x_765 = obj;
+  int tint_symbol_53[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_54 = QuicksortObject(tint_symbol_53);
+  obj = tint_symbol_54;
+  obj = x_765;
+  vec2 x_450 = vec2(x_447.x, x_185.y);
+  vec3 x_766 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  vec3 x_767 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  color = x_767;
+  color = x_766;
+  uv = x_192;
+  color = vec3(1.0f, 2.0f, 3.0f);
+  vec3 x_768 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  color = x_768;
+  vec3 x_451 = vec3(x_185.x, x_185.y, x_446.y);
+  QuicksortObject x_769 = obj;
+  int tint_symbol_55[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_56 = QuicksortObject(tint_symbol_55);
+  obj = tint_symbol_56;
+  obj = x_769;
+  int x_770 = obj.numbers[0u];
+  obj.numbers[0u] = 0;
+  obj.numbers[0u] = x_770;
+  int x_201 = obj.numbers[0u];
+  QuicksortObject x_771 = obj;
+  int tint_symbol_57[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_58 = QuicksortObject(tint_symbol_57);
+  obj = tint_symbol_58;
+  obj = x_771;
+  int x_772 = obj.numbers[0u];
+  obj.numbers[0u] = 0;
+  obj.numbers[0u] = x_772;
+  float x_206 = color.x;
+  float x_773 = color.x;
+  color.x = 0.0f;
+  color.x = x_773;
+  vec2 x_452 = vec2(vec3(1.0f, 2.0f, 3.0f).z, vec3(1.0f, 2.0f, 3.0f).y);
+  int x_774 = i_2;
+  i_2 = 0;
+  i_2 = x_774;
+  QuicksortObject x_775 = obj;
+  int tint_symbol_59[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_60 = QuicksortObject(tint_symbol_59);
+  obj = tint_symbol_60;
+  obj = x_775;
+  vec3 x_453 = vec3(x_451.x, x_450.x, x_450.y);
+  color.x = (x_206 + float(x_201));
+  vec2 x_776 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_776;
+  vec2 x_777 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_777;
+  vec2 x_454 = vec2(x_184.y, x_184.y);
+  float x_210 = uv.x;
+  vec2 x_455 = vec2(x_192.y, x_192.x);
+  float x_778 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_778;
+  QuicksortObject x_779 = obj;
+  int tint_symbol_61[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_62 = QuicksortObject(tint_symbol_61);
+  obj = tint_symbol_62;
+  obj = x_779;
+  if ((x_210 > 0.25f)) {
+    int x_780 = i_2;
+    i_2 = 0;
+    i_2 = x_780;
+    int x_781 = obj.numbers[0u];
+    obj.numbers[0u] = 0;
+    obj.numbers[0u] = x_781;
+    vec3 x_456 = vec3(vec2(0.0f, 0.0f).y, x_448.y, x_448.y);
+    float x_782 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_782;
+    int x_216 = obj.numbers[1];
+    QuicksortObject x_783 = obj;
+    int tint_symbol_63[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_64 = QuicksortObject(tint_symbol_63);
+    obj = tint_symbol_64;
+    obj = x_783;
+    vec2 x_457 = vec2(x_454.x, x_454.x);
+    vec2 x_784 = uv;
+    uv = vec2(0.0f, 0.0f);
+    uv = x_784;
+    QuicksortObject x_785 = obj;
+    int tint_symbol_65[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_66 = QuicksortObject(tint_symbol_65);
+    obj = tint_symbol_66;
+    obj = x_785;
+    vec2 x_458 = vec2(vec3(1.0f, 2.0f, 3.0f).z, vec2(0.0f, 0.0f).y);
+    int x_786 = i_2;
+    i_2 = 0;
+    i_2 = x_786;
+    float x_219 = color[0];
+    float x_787 = color[0];
+    color[0] = 0.0f;
+    color[0] = x_787;
+    vec3 x_788 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_788;
+    vec3 x_789 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_789;
+    vec3 x_459 = vec3(x_454.y, x_454.y, x_447.y);
+    float x_790 = color[0];
+    color[0] = 0.0f;
+    color[0] = x_790;
+    color.x = (float(x_216) + x_219);
+    int x_791 = obj.numbers[0u];
+    obj.numbers[0u] = 0;
+    obj.numbers[0u] = x_791;
+  }
+  float x_792 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_792;
+  float x_793 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_793;
+  float x_223 = uv.x;
+  float x_794 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_794;
+  vec3 x_460 = vec3(x_453.z, x_453.y, x_453.y);
+  vec2 x_795 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_795;
+  float x_796 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_796;
+  vec2 x_461 = vec2(vec2(0.0f, 0.0f).y, vec2(0.0f, 0.0f).y);
+  float x_797 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_797;
+  if ((x_223 > 0.5f)) {
+    float x_798 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_798;
+    vec2 x_462 = vec2(x_446.x, x_446.x);
+    float x_799 = color.x;
+    color.x = 0.0f;
+    color.x = x_799;
+    float x_800 = color.x;
+    color.x = 0.0f;
+    color.x = x_800;
+    vec3 x_463 = vec3(x_453.x, x_453.z, x_461.y);
+    float x_801 = color.x;
+    color.x = 0.0f;
+    color.x = x_801;
+    int x_230 = obj.numbers[2u];
+    float x_802 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_802;
+    float x_803 = color.x;
+    color.x = 0.0f;
+    color.x = x_803;
+    int x_804 = obj.numbers[2u];
+    obj.numbers[2u] = 0;
+    obj.numbers[2u] = x_804;
+    vec2 x_464 = vec2(x_450.y, x_191.x);
+    float x_805 = color.y;
+    color.y = 0.0f;
+    color.y = x_805;
+    float x_234 = color.y;
+    int x_806 = obj.numbers[2u];
+    obj.numbers[2u] = 0;
+    obj.numbers[2u] = x_806;
+    vec2 x_465 = vec2(x_463.x, x_185.x);
+    float x_807 = color.x;
+    color.x = 0.0f;
+    color.x = x_807;
+    int x_808 = i_2;
+    i_2 = 0;
+    i_2 = x_808;
+    vec2 x_466 = vec2(x_455.y, vec2(0.0f, 0.0f).y);
+    int x_809 = i_2;
+    i_2 = 0;
+    i_2 = x_809;
+    color.y = (float(x_230) + x_234);
+    float x_810 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_810;
+  }
+  int x_811 = i_2;
+  i_2 = 0;
+  i_2 = x_811;
+  vec2 x_467 = vec2(x_191.x, x_191.x);
+  float x_812 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_812;
+  float x_238 = uv[0];
+  vec3 x_813 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  color = x_813;
+  float x_814 = color.x;
+  color.x = 0.0f;
+  color.x = x_814;
+  if ((x_238 > 0.75f)) {
+    float x_815 = color.x;
+    color.x = 0.0f;
+    color.x = x_815;
+    int x_245 = obj.numbers[3];
+    float x_816 = color.x;
+    color.x = 0.0f;
+    color.x = x_816;
+    QuicksortObject x_817 = obj;
+    int tint_symbol_67[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_68 = QuicksortObject(tint_symbol_67);
+    obj = tint_symbol_68;
+    obj = x_817;
+    vec3 x_468 = vec3(x_467.x, x_467.x, x_467.x);
+    float x_818 = uv[0];
+    uv[0] = 0.0f;
+    uv[0] = x_818;
+    float x_819 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_819;
+    float x_249 = color.z;
+    vec3 x_820 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_820;
+    vec3 x_469 = vec3(x_467.x, x_191.y, x_467.y);
+    float x_821 = color.z;
+    color.z = 0.0f;
+    color.z = x_821;
+    int x_822 = obj.numbers[0u];
+    obj.numbers[0u] = 0;
+    obj.numbers[0u] = x_822;
+    vec2 x_470 = vec2(vec2(0.0f, 0.0f).x, vec2(0.0f, 0.0f).y);
+    float x_823 = color.z;
+    color.z = 0.0f;
+    color.z = x_823;
+    color.z = (x_249 + float(x_245));
+    vec2 x_824 = uv;
+    uv = vec2(0.0f, 0.0f);
+    uv = x_824;
+    vec2 x_471 = vec2(x_470.y, x_470.y);
+  }
+  float x_825 = uv[0];
+  uv[0] = 0.0f;
+  uv[0] = x_825;
+  vec3 x_472 = vec3(x_454.x, x_454.y, x_454.y);
+  int x_254 = obj.numbers[4];
+  float x_826 = uv[0];
+  uv[0] = 0.0f;
+  uv[0] = x_826;
+  vec3 x_827 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  color = x_827;
+  vec3 x_473 = vec3(x_446.y, x_453.x, x_453.x);
+  int x_828 = obj.numbers[4];
+  obj.numbers[4] = 0;
+  obj.numbers[4] = x_828;
+  vec2 x_474 = vec2(x_191.x, x_184.z);
+  float x_829 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_829;
+  float x_257 = color.y;
+  float x_830 = color.y;
+  color.y = 0.0f;
+  color.y = x_830;
+  vec2 x_475 = vec2(x_467.x, x_450.x);
+  float x_831 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_831;
+  float x_832 = color.x;
+  color.x = 0.0f;
+  color.x = x_832;
+  vec2 x_476 = vec2(x_451.z, x_460.y);
+  color.y = (x_257 + float(x_254));
+  vec3 x_477 = vec3(vec2(0.0f, 0.0f).x, x_472.x, vec2(0.0f, 0.0f).y);
+  float x_833 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_833;
+  float x_834 = color.x;
+  color.x = 0.0f;
+  color.x = x_834;
+  vec2 x_478 = vec2(x_472.x, x_472.y);
+  float x_835 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_835;
+  float x_261 = uv.y;
+  int x_836 = i_2;
+  i_2 = 0;
+  i_2 = x_836;
+  vec3 x_479 = vec3(vec2(0.0f, 0.0f).y, x_454.y, vec2(0.0f, 0.0f).x);
+  int x_837 = obj.numbers[0u];
+  obj.numbers[0u] = 0;
+  obj.numbers[0u] = x_837;
+  float x_838 = color.y;
+  color.y = 0.0f;
+  color.y = x_838;
+  vec3 x_480 = vec3(x_446.x, x_446.x, vec2(0.0f, 0.0f).y);
+  float x_839 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_839;
+  if ((x_261 > 0.25f)) {
+    vec2 x_481 = vec2(x_447.x, x_480.z);
+    vec3 x_840 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_840;
+    int x_267 = obj.numbers[5u];
+    float x_841 = color.x;
+    color.x = 0.0f;
+    color.x = x_841;
+    int x_842 = i_2;
+    i_2 = 0;
+    i_2 = x_842;
+    int x_843 = i_2;
+    i_2 = 0;
+    i_2 = x_843;
+    float x_270 = color.x;
+    float x_844 = uv[0];
+    uv[0] = 0.0f;
+    uv[0] = x_844;
+    vec3 x_482 = vec3(x_455.x, x_475.y, x_455.y);
+    QuicksortObject x_845 = obj;
+    int tint_symbol_69[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_70 = QuicksortObject(tint_symbol_69);
+    obj = tint_symbol_70;
+    obj = x_845;
+    float x_846 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_846;
+    int x_847 = i_2;
+    i_2 = 0;
+    i_2 = x_847;
+    vec3 x_483 = vec3(x_184.w, x_184.w, x_192.x);
+    float x_848 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_848;
+    color.x = (float(x_267) + x_270);
+    vec3 x_484 = vec3(x_454.y, x_450.x, x_454.y);
+    float x_849 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_849;
+  }
+  float x_850 = color.x;
+  color.x = 0.0f;
+  color.x = x_850;
+  vec3 x_485 = vec3(x_467.x, x_450.y, x_450.x);
+  float x_851 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_851;
+  int x_852 = obj.numbers[4];
+  obj.numbers[4] = 0;
+  obj.numbers[4] = x_852;
+  float x_274 = uv.y;
+  int x_853 = obj.numbers[0u];
+  obj.numbers[0u] = 0;
+  obj.numbers[0u] = x_853;
+  if ((x_274 > 0.5f)) {
+    float x_854 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_854;
+    vec2 x_486 = vec2(x_480.y, x_455.y);
+    float x_855 = color.y;
+    color.y = 0.0f;
+    color.y = x_855;
+    vec2 x_487 = vec2(x_449.z, x_449.y);
+    float x_856 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_856;
+    int x_280 = obj.numbers[6u];
+    float x_857 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_857;
+    int x_858 = i_2;
+    i_2 = 0;
+    i_2 = x_858;
+    int x_859 = obj.numbers[4];
+    obj.numbers[4] = 0;
+    obj.numbers[4] = x_859;
+    vec2 x_488 = vec2(x_473.z, x_473.y);
+    float x_283 = color.y;
+    vec2 x_860 = uv;
+    uv = vec2(0.0f, 0.0f);
+    uv = x_860;
+    float x_861 = color.x;
+    color.x = 0.0f;
+    color.x = x_861;
+    vec2 x_489 = vec2(x_475.y, x_475.x);
+    int x_862 = obj.numbers[6u];
+    obj.numbers[6u] = 0;
+    obj.numbers[6u] = x_862;
+    int x_863 = obj.numbers[6u];
+    obj.numbers[6u] = 0;
+    obj.numbers[6u] = x_863;
+    vec2 x_490 = vec2(x_480.z, x_480.z);
+    QuicksortObject x_864 = obj;
+    int tint_symbol_71[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_72 = QuicksortObject(tint_symbol_71);
+    obj = tint_symbol_72;
+    obj = x_864;
+    color.y = (float(x_280) + x_283);
+    float x_865 = color.x;
+    color.x = 0.0f;
+    color.x = x_865;
+    vec2 x_491 = vec2(vec3(1.0f, 2.0f, 3.0f).y, x_454.x);
+    float x_866 = color.y;
+    color.y = 0.0f;
+    color.y = x_866;
+  }
+  vec2 x_492 = vec2(x_455.y, x_455.y);
+  float x_867 = color.x;
+  color.x = 0.0f;
+  color.x = x_867;
+  float x_287 = uv.y;
+  QuicksortObject x_868 = obj;
+  int tint_symbol_73[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_74 = QuicksortObject(tint_symbol_73);
+  obj = tint_symbol_74;
+  obj = x_868;
+  vec2 x_493 = vec2(x_475.x, x_475.y);
+  float x_869 = uv[0];
+  uv[0] = 0.0f;
+  uv[0] = x_869;
+  float x_870 = color.y;
+  color.y = 0.0f;
+  color.y = x_870;
+  vec3 x_494 = vec3(x_191.x, x_191.y, x_191.y);
+  int x_871 = obj.numbers[4];
+  obj.numbers[4] = 0;
+  obj.numbers[4] = x_871;
+  if ((x_287 > 0.75f)) {
+    vec3 x_872 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_872;
+    float x_873 = color.x;
+    color.x = 0.0f;
+    color.x = x_873;
+    vec3 x_495 = vec3(x_192.y, x_192.x, x_192.y);
+    vec3 x_874 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_874;
+    int x_293 = obj.numbers[7];
+    float x_875 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_875;
+    vec3 x_496 = vec3(x_475.x, x_467.y, x_467.x);
+    float x_876 = color.y;
+    color.y = 0.0f;
+    color.y = x_876;
+    vec2 x_497 = vec2(x_477.x, x_461.y);
+    int x_877 = obj.numbers[0u];
+    obj.numbers[0u] = 0;
+    obj.numbers[0u] = x_877;
+    float x_878 = color.y;
+    color.y = 0.0f;
+    color.y = x_878;
+    vec3 x_498 = vec3(x_478.x, x_478.y, x_478.x);
+    float x_879 = color.x;
+    color.x = 0.0f;
+    color.x = x_879;
+    float x_296 = color.z;
+    float x_880 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_880;
+    vec2 x_499 = vec2(x_184.x, x_184.y);
+    float x_881 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_881;
+    float x_882 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_882;
+    float x_883 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_883;
+    vec3 x_500 = vec3(x_499.y, x_499.y, x_494.z);
+    float x_884 = color.z;
+    color.z = 0.0f;
+    color.z = x_884;
+    color.z = (float(x_293) + x_296);
+    float x_885 = color.y;
+    color.y = 0.0f;
+    color.y = x_885;
+    vec2 x_501 = vec2(x_453.x, x_453.z);
+    float x_886 = color.x;
+    color.x = 0.0f;
+    color.x = x_886;
+  }
+  int x_887 = i_2;
+  i_2 = 0;
+  i_2 = x_887;
+  vec2 x_502 = vec2(x_451.y, x_192.y);
+  vec2 x_888 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_888;
+  int x_301 = obj.numbers[8];
+  int x_889 = i_2;
+  i_2 = 0;
+  i_2 = x_889;
+  vec2 x_503 = vec2(x_185.x, x_451.z);
+  int x_890 = obj.numbers[8];
+  obj.numbers[8] = 0;
+  obj.numbers[8] = x_890;
+  float x_891 = color.y;
+  color.y = 0.0f;
+  color.y = x_891;
+  vec2 x_504 = vec2(x_453.y, vec2(0.0f, 0.0f).x);
+  float x_892 = color.x;
+  color.x = 0.0f;
+  color.x = x_892;
+  vec3 x_505 = vec3(x_504.x, x_504.y, x_504.x);
+  float x_893 = color.z;
+  color.z = 0.0f;
+  color.z = x_893;
+  float x_304 = color.z;
+  float x_894 = color.x;
+  color.x = 0.0f;
+  color.x = x_894;
+  vec2 x_506 = vec2(x_493.x, x_492.x);
+  int x_895 = obj.numbers[4];
+  obj.numbers[4] = 0;
+  obj.numbers[4] = x_895;
+  float x_896 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_896;
+  vec2 x_507 = vec2(x_461.x, x_447.x);
+  float x_897 = color.y;
+  color.y = 0.0f;
+  color.y = x_897;
+  color.z = (x_304 + float(x_301));
+  vec2 x_898 = uv;
+  uv = vec2(0.0f, 0.0f);
+  uv = x_898;
+  float x_899 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_899;
+  vec3 x_508 = vec3(x_461.y, x_461.x, x_506.y);
+  float x_900 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_900;
+  float x_308 = uv.x;
+  float x_901 = color.y;
+  color.y = 0.0f;
+  color.y = x_901;
+  vec3 x_509 = vec3(x_503.y, x_503.x, x_448.z);
+  float x_902 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_902;
+  float x_310 = uv.y;
+  float x_903 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_903;
+  float x_904 = color.z;
+  color.z = 0.0f;
+  color.z = x_904;
+  vec3 x_510 = vec3(vec3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
+  float x_905 = color.z;
+  color.z = 0.0f;
+  color.z = x_905;
+  int x_906 = i_2;
+  i_2 = 0;
+  i_2 = x_906;
+  vec2 x_511 = vec2(x_485.z, x_485.y);
+  vec3 x_907 = color;
+  color = vec3(0.0f, 0.0f, 0.0f);
+  color = x_907;
+  float x_908 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_908;
+  vec3 x_512 = vec3(x_455.y, x_455.y, x_455.y);
+  int x_909 = obj.numbers[4];
+  obj.numbers[4] = 0;
+  obj.numbers[4] = x_909;
+  if ((abs((x_308 - x_310)) < 0.25f)) {
+    float x_910 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_910;
+    QuicksortObject x_911 = obj;
+    int tint_symbol_75[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    QuicksortObject tint_symbol_76 = QuicksortObject(tint_symbol_75);
+    obj = tint_symbol_76;
+    obj = x_911;
+    vec3 x_513 = vec3(x_505.z, x_505.x, x_448.x);
+    int x_912 = obj.numbers[8];
+    obj.numbers[8] = 0;
+    obj.numbers[8] = x_912;
+    int x_317 = obj.numbers[9u];
+    vec3 x_514 = vec3(x_474.y, x_474.y, x_474.y);
+    float x_913 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_913;
+    float x_320 = color.x;
+    float x_914 = uv.y;
+    uv.y = 0.0f;
+    uv.y = x_914;
+    vec2 x_515 = vec2(x_502.x, x_502.y);
+    float x_915 = color.x;
+    color.x = 0.0f;
+    color.x = x_915;
+    vec3 x_916 = color;
+    color = vec3(0.0f, 0.0f, 0.0f);
+    color = x_916;
+    vec2 x_516 = vec2(x_452.x, x_452.x);
+    vec2 x_917 = uv;
+    uv = vec2(0.0f, 0.0f);
+    uv = x_917;
+    float x_918 = uv.x;
+    uv.x = 0.0f;
+    uv.x = x_918;
+    vec3 x_517 = vec3(vec2(0.0f, 0.0f).x, vec2(0.0f, 0.0f).x, vec2(0.0f, 0.0f).y);
+    color.x = (float(x_317) + x_320);
+    float x_919 = color.x;
+    color.x = 0.0f;
+    color.x = x_919;
+    vec3 x_518 = vec3(x_480.y, x_508.x, x_480.x);
+    float x_920 = color.x;
+    color.x = 0.0f;
+    color.x = x_920;
+  }
+  float x_921 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_921;
+  vec3 x_325 = color;
+  float x_922 = uv[0];
+  uv[0] = 0.0f;
+  uv[0] = x_922;
+  vec3 x_519 = vec3(x_447.x, x_446.x, x_446.y);
+  vec3 x_326 = normalize(x_325);
+  float x_923 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_923;
+  QuicksortObject x_924 = obj;
+  int tint_symbol_77[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_78 = QuicksortObject(tint_symbol_77);
+  obj = tint_symbol_78;
+  obj = x_924;
+  QuicksortObject x_925 = obj;
+  int tint_symbol_79[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_80 = QuicksortObject(tint_symbol_79);
+  obj = tint_symbol_80;
+  obj = x_925;
+  float x_926 = color.y;
+  color.y = 0.0f;
+  color.y = x_926;
+  vec2 x_520 = vec2(x_506.y, x_519.y);
+  float x_927 = color.y;
+  color.y = 0.0f;
+  color.y = x_927;
+  vec4 x_330 = vec4(x_326.x, x_326.y, x_326.z, 1.0f);
+  float x_928 = uv.y;
+  uv.y = 0.0f;
+  uv.y = x_928;
+  vec3 x_521 = vec3(vec3(1.0f, 2.0f, 3.0f).y, vec3(1.0f, 2.0f, 3.0f).y, x_520.y);
+  float x_929 = uv.x;
+  uv.x = 0.0f;
+  uv.x = x_929;
+  x_GLF_color = x_330;
+  QuicksortObject x_930 = obj;
+  int tint_symbol_81[10] = int[10](0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  QuicksortObject tint_symbol_82 = QuicksortObject(tint_symbol_81);
+  obj = tint_symbol_82;
+  obj = x_930;
+  vec3 x_522 = vec3(x_330.w, x_330.y, x_493.x);
+  float x_931 = color.x;
+  color.x = 0.0f;
+  color.x = x_931;
+  return;
+}
+
+struct main_out {
+  vec4 x_GLF_color_1;
+};
+struct tint_symbol_3 {
+  vec4 gl_FragCoord_param;
+};
+struct tint_symbol_4 {
+  vec4 x_GLF_color_1;
+};
+
+main_out tint_symbol_1_inner(vec4 gl_FragCoord_param) {
+  tint_symbol = gl_FragCoord_param;
+  main_1();
+  main_out tint_symbol_83 = main_out(x_GLF_color);
+  return tint_symbol_83;
+}
+
+tint_symbol_4 tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  main_out inner_result = tint_symbol_1_inner(tint_symbol_2.gl_FragCoord_param);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
+  return wrapper_result;
+}
+out vec4 x_GLF_color_1;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.gl_FragCoord_param = gl_FragCoord;
+  tint_symbol_4 outputs;
+  outputs = tint_symbol_1(inputs);
+  x_GLF_color_1 = outputs.x_GLF_color_1;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:1553: 'gl_FragCoord_param' : identifiers starting with "gl_" are reserved 
+ERROR: 0:1553: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/757.wgsl.expected.glsl b/test/bug/tint/757.wgsl.expected.glsl
new file mode 100644
index 0000000..d877f23
--- /dev/null
+++ b/test/bug/tint/757.wgsl.expected.glsl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+uniform highp sampler2DArray myTexture;
+
+layout (binding = 3) buffer Result_1 {
+  float values[];
+} result;
+
+struct tint_symbol_2 {
+  uvec3 GlobalInvocationID;
+};
+
+void tint_symbol_inner(uvec3 GlobalInvocationID) {
+  uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
+  flatIndex = (flatIndex * 1u);
+  vec4 texel = texelFetch(myTexture, ivec4(ivec3(ivec2(GlobalInvocationID.xy), 0), 0));
+  {
+    for(uint i = 0u; (i < 1u); i = (i + 1u)) {
+      result.values[(flatIndex + i)] = texel.r;
+    }
+  }
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:18: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:18: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
+ERROR: 0:18: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/764.wgsl.expected.glsl b/test/bug/tint/764.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/764.wgsl.expected.glsl
diff --git a/test/bug/tint/782.wgsl.expected.glsl b/test/bug/tint/782.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/782.wgsl.expected.glsl
diff --git a/test/bug/tint/804.spv.expected.glsl b/test/bug/tint/804.spv.expected.glsl
new file mode 100644
index 0000000..2bc83db
--- /dev/null
+++ b/test/bug/tint/804.spv.expected.glsl
@@ -0,0 +1,3 @@
+SKIP: FAILED
+
+error: extended arithmetic is not finalized for WGSL: https://github.com/gpuweb/gpuweb/issues/1565: %712 = OpISubBorrow %710 %107 %470
diff --git a/test/bug/tint/807.spv.expected.glsl b/test/bug/tint/807.spv.expected.glsl
new file mode 100644
index 0000000..f624e54
--- /dev/null
+++ b/test/bug/tint/807.spv.expected.glsl
@@ -0,0 +1,3 @@
+SKIP: FAILED
+
+error: undef pointer is not valid: %845 = OpUndef %434
diff --git a/test/bug/tint/824.wgsl.expected.glsl b/test/bug/tint/824.wgsl.expected.glsl
new file mode 100644
index 0000000..c8179b1
--- /dev/null
+++ b/test/bug/tint/824.wgsl.expected.glsl
@@ -0,0 +1,46 @@
+#version 310 es
+precision mediump float;
+
+struct Output {
+  vec4 Position;
+  vec4 color;
+};
+struct tint_symbol_3 {
+  uint VertexIndex;
+  uint InstanceIndex;
+};
+struct tint_symbol_4 {
+  vec4 color;
+  vec4 Position;
+};
+
+Output tint_symbol_inner(uint VertexIndex, uint InstanceIndex) {
+  vec2 zv[4] = vec2[4](vec2(0.200000003f, 0.200000003f), vec2(0.300000012f, 0.300000012f), vec2(-0.100000001f, -0.100000001f), vec2(1.100000024f, 1.100000024f));
+  float z = zv[InstanceIndex].x;
+  Output tint_symbol_1 = Output(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  tint_symbol_1.Position = vec4(0.5f, 0.5f, z, 1.0f);
+  vec4 colors[4] = vec4[4](vec4(1.0f, 0.0f, 0.0f, 1.0f), vec4(0.0f, 1.0f, 0.0f, 1.0f), vec4(0.0f, 0.0f, 1.0f, 1.0f), vec4(1.0f, 1.0f, 1.0f, 1.0f));
+  tint_symbol_1.color = colors[InstanceIndex];
+  return tint_symbol_1;
+}
+
+tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
+  Output inner_result = tint_symbol_inner(tint_symbol_2.VertexIndex, tint_symbol_2.InstanceIndex);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.Position = inner_result.Position;
+  wrapper_result.color = inner_result.color;
+  return wrapper_result;
+}
+out vec4 color;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.VertexIndex = uint(gl_VertexID);
+  inputs.InstanceIndex = uint(gl_InstanceID);
+  tint_symbol_4 outputs;
+  outputs = tint_symbol(inputs);
+  color = outputs.color;
+  gl_Position = outputs.Position;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/bug/tint/825.wgsl.expected.glsl b/test/bug/tint/825.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/825.wgsl.expected.glsl
diff --git a/test/bug/tint/827.wgsl.expected.glsl b/test/bug/tint/827.wgsl.expected.glsl
new file mode 100644
index 0000000..9c634b7
--- /dev/null
+++ b/test/bug/tint/827.wgsl.expected.glsl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+const uint width = 128u;
+uniform highp sampler2D tex;
+layout (binding = 1) buffer Result_1 {
+  float values[];
+} result;
+
+struct tint_symbol_2 {
+  uvec3 GlobalInvocationId;
+};
+
+void tint_symbol_inner(uvec3 GlobalInvocationId) {
+  result.values[((GlobalInvocationId.y * width) + GlobalInvocationId.x)] = texelFetch(tex, ivec3(int(GlobalInvocationId.x), int(GlobalInvocationId.y), 0)).x;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.GlobalInvocationId);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.GlobalInvocationId = gl_GlobalInvocationID;
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:16: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:16: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/870.spvasm.expected.glsl b/test/bug/tint/870.spvasm.expected.glsl
new file mode 100644
index 0000000..631204b
--- /dev/null
+++ b/test/bug/tint/870.spvasm.expected.glsl
@@ -0,0 +1,35 @@
+#version 310 es
+precision mediump float;
+
+struct sspp962805860buildInformationS {
+  vec4 footprint;
+  vec4 offset;
+  int essence;
+  int orientation[6];
+};
+
+layout (binding = 2) buffer x_B4_BuildInformation_1 {
+  sspp962805860buildInformationS passthru;
+} sspp962805860buildInformation;
+
+void main_1() {
+  int orientation[6] = int[6](0, 0, 0, 0, 0, 0);
+  int x_23[6] = sspp962805860buildInformation.passthru.orientation;
+  orientation[0] = x_23[0u];
+  orientation[1] = x_23[1u];
+  orientation[2] = x_23[2u];
+  orientation[3] = x_23[3u];
+  orientation[4] = x_23[4u];
+  orientation[5] = x_23[5u];
+  return;
+}
+
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/913.wgsl.expected.glsl b/test/bug/tint/913.wgsl.expected.glsl
new file mode 100644
index 0000000..0830bdf
--- /dev/null
+++ b/test/bug/tint/913.wgsl.expected.glsl
@@ -0,0 +1,116 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+uniform highp sampler2D src;
+uniform highp sampler2D dst;
+layout (binding = 2) buffer OutputBuf_1 {
+  uint result[];
+} tint_symbol;
+layout (binding = 3) uniform Uniforms_1 {
+  uint dstTextureFlipY;
+  uint channelCount;
+  uvec2 srcCopyOrigin;
+  uvec2 dstCopyOrigin;
+  uvec2 copySize;
+} uniforms;
+
+bool aboutEqual(float value, float expect) {
+  return (abs((value - expect)) < 0.001f);
+}
+
+struct tint_symbol_3 {
+  uvec3 GlobalInvocationID;
+};
+
+void tint_symbol_1_inner(uvec3 GlobalInvocationID) {
+  ivec2 srcSize = textureSize(src);
+  ivec2 dstSize = textureSize(dst);
+  uvec2 dstTexCoord = uvec2(GlobalInvocationID.xy);
+  vec4 nonCoveredColor = vec4(0.0f, 1.0f, 0.0f, 1.0f);
+  bool success = true;
+  bool tint_tmp_2 = (dstTexCoord.x < uniforms.dstCopyOrigin.x);
+  if (!tint_tmp_2) {
+    tint_tmp_2 = (dstTexCoord.y < uniforms.dstCopyOrigin.y);
+  }
+  bool tint_tmp_1 = (tint_tmp_2);
+  if (!tint_tmp_1) {
+    tint_tmp_1 = (dstTexCoord.x >= (uniforms.dstCopyOrigin.x + uniforms.copySize.x));
+  }
+  bool tint_tmp = (tint_tmp_1);
+  if (!tint_tmp) {
+    tint_tmp = (dstTexCoord.y >= (uniforms.dstCopyOrigin.y + uniforms.copySize.y));
+  }
+  if ((tint_tmp)) {
+    bool tint_tmp_3 = success;
+    if (tint_tmp_3) {
+      tint_tmp_3 = all((texelFetch(dst, ivec3(ivec2(dstTexCoord), 0)) == nonCoveredColor));
+    }
+    success = (tint_tmp_3);
+  } else {
+    uvec2 srcTexCoord = ((dstTexCoord - uniforms.dstCopyOrigin) + uniforms.srcCopyOrigin);
+    if ((uniforms.dstTextureFlipY == 1u)) {
+      srcTexCoord.y = ((uint(srcSize.y) - srcTexCoord.y) - 1u);
+    }
+    vec4 srcColor = texelFetch(src, ivec3(ivec2(srcTexCoord), 0));
+    vec4 dstColor = texelFetch(dst, ivec3(ivec2(dstTexCoord), 0));
+    if ((uniforms.channelCount == 2u)) {
+      bool tint_tmp_5 = success;
+      if (tint_tmp_5) {
+        tint_tmp_5 = aboutEqual(dstColor.r, srcColor.r);
+      }
+      bool tint_tmp_4 = (tint_tmp_5);
+      if (tint_tmp_4) {
+        tint_tmp_4 = aboutEqual(dstColor.g, srcColor.g);
+      }
+      success = (tint_tmp_4);
+    } else {
+      bool tint_tmp_9 = success;
+      if (tint_tmp_9) {
+        tint_tmp_9 = aboutEqual(dstColor.r, srcColor.r);
+      }
+      bool tint_tmp_8 = (tint_tmp_9);
+      if (tint_tmp_8) {
+        tint_tmp_8 = aboutEqual(dstColor.g, srcColor.g);
+      }
+      bool tint_tmp_7 = (tint_tmp_8);
+      if (tint_tmp_7) {
+        tint_tmp_7 = aboutEqual(dstColor.b, srcColor.b);
+      }
+      bool tint_tmp_6 = (tint_tmp_7);
+      if (tint_tmp_6) {
+        tint_tmp_6 = aboutEqual(dstColor.a, srcColor.a);
+      }
+      success = (tint_tmp_6);
+    }
+  }
+  uint outputIndex = ((GlobalInvocationID.y * uint(dstSize.x)) + GlobalInvocationID.x);
+  if (success) {
+    tint_symbol.result[outputIndex] = 1u;
+  } else {
+    tint_symbol.result[outputIndex] = 0u;
+  }
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  tint_symbol_1_inner(tint_symbol_2.GlobalInvocationID);
+  return;
+}
+void main() {
+  tint_symbol_3 inputs;
+  inputs.GlobalInvocationID = gl_GlobalInvocationID;
+  tint_symbol_1(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:27: 'textureSize' : no matching overloaded function found 
+ERROR: 0:27: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:27: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/914.wgsl.expected.glsl b/test/bug/tint/914.wgsl.expected.glsl
new file mode 100644
index 0000000..026388e
--- /dev/null
+++ b/test/bug/tint/914.wgsl.expected.glsl
@@ -0,0 +1,177 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer Matrix_1 {
+  float numbers[];
+} firstMatrix;
+layout (binding = 1) buffer Matrix_2 {
+  float numbers[];
+} secondMatrix;
+layout (binding = 2) buffer Matrix_3 {
+  float numbers[];
+} resultMatrix;
+layout (binding = 3) uniform Uniforms_1 {
+  uint dimAOuter;
+  uint dimInner;
+  uint dimBOuter;
+} uniforms;
+
+float mm_readA(uint row, uint col) {
+  bool tint_tmp = (row < uniforms.dimAOuter);
+  if (tint_tmp) {
+    tint_tmp = (col < uniforms.dimInner);
+  }
+  if ((tint_tmp)) {
+    float result = firstMatrix.numbers[((row * uniforms.dimInner) + col)];
+    return result;
+  }
+  return 0.0f;
+}
+
+float mm_readB(uint row, uint col) {
+  bool tint_tmp_1 = (row < uniforms.dimInner);
+  if (tint_tmp_1) {
+    tint_tmp_1 = (col < uniforms.dimBOuter);
+  }
+  if ((tint_tmp_1)) {
+    float result = secondMatrix.numbers[((row * uniforms.dimBOuter) + col)];
+    return result;
+  }
+  return 0.0f;
+}
+
+void mm_write(uint row, uint col, float value) {
+  bool tint_tmp_2 = (row < uniforms.dimAOuter);
+  if (tint_tmp_2) {
+    tint_tmp_2 = (col < uniforms.dimBOuter);
+  }
+  if ((tint_tmp_2)) {
+    uint index = (col + (row * uniforms.dimBOuter));
+    resultMatrix.numbers[index] = value;
+  }
+}
+
+const uint RowPerThread = 4u;
+const uint ColPerThread = 4u;
+const uint TileAOuter = 64u;
+const uint TileBOuter = 64u;
+const uint TileInner = 64u;
+groupshared float mm_Asub[64][64];
+groupshared float mm_Bsub[64][64];
+
+struct tint_symbol_2 {
+  uvec3 local_id;
+  uint local_invocation_index;
+  uvec3 global_id;
+};
+
+void tint_symbol_inner(uvec3 local_id, uvec3 global_id, uint local_invocation_index) {
+  {
+    for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 256u)) {
+      uint i = (idx / 64u);
+      uint i_1 = (idx % 64u);
+      mm_Asub[i][i_1] = 0.0f;
+      mm_Bsub[i][i_1] = 0.0f;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  uint tileRow = (local_id.y * RowPerThread);
+  uint tileCol = (local_id.x * ColPerThread);
+  uint globalRow = (global_id.y * RowPerThread);
+  uint globalCol = (global_id.x * ColPerThread);
+  uint numTiles = (((uniforms.dimInner - 1u) / TileInner) + 1u);
+  float acc[16] = float[16](0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float ACached = 0.0f;
+  float BCached[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  {
+    for(uint index = 0u; (index < (RowPerThread * ColPerThread)); index = (index + 1u)) {
+      acc[index] = 0.0f;
+    }
+  }
+  uint ColPerThreadA = (TileInner / 16u);
+  uint tileColA = (local_id.x * ColPerThreadA);
+  uint RowPerThreadB = (TileInner / 16u);
+  uint tileRowB = (local_id.y * RowPerThreadB);
+  {
+    for(uint t = 0u; (t < numTiles); t = (t + 1u)) {
+      {
+        for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
+          {
+            for(uint innerCol = 0u; (innerCol < ColPerThreadA); innerCol = (innerCol + 1u)) {
+              uint inputRow = (tileRow + innerRow);
+              uint inputCol = (tileColA + innerCol);
+              mm_Asub[inputRow][inputCol] = mm_readA((globalRow + innerRow), ((t * TileInner) + inputCol));
+            }
+          }
+        }
+      }
+      {
+        for(uint innerRow = 0u; (innerRow < RowPerThreadB); innerRow = (innerRow + 1u)) {
+          {
+            for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
+              uint inputRow = (tileRowB + innerRow);
+              uint inputCol = (tileCol + innerCol);
+              mm_Bsub[innerCol][inputCol] = mm_readB(((t * TileInner) + inputRow), (globalCol + innerCol));
+            }
+          }
+        }
+      }
+      GroupMemoryBarrierWithGroupSync();
+      {
+        for(uint k = 0u; (k < TileInner); k = (k + 1u)) {
+          {
+            for(uint inner = 0u; (inner < ColPerThread); inner = (inner + 1u)) {
+              BCached[inner] = mm_Bsub[k][(tileCol + inner)];
+            }
+          }
+          {
+            for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
+              ACached = mm_Asub[(tileRow + innerRow)][k];
+              {
+                for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
+                  uint index = ((innerRow * ColPerThread) + innerCol);
+                  acc[index] = (acc[index] + (ACached * BCached[innerCol]));
+                }
+              }
+            }
+          }
+        }
+      }
+      GroupMemoryBarrierWithGroupSync();
+    }
+  }
+  {
+    for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
+      {
+        for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
+          uint index = ((innerRow * ColPerThread) + innerCol);
+          mm_write((globalRow + innerRow), (globalCol + innerCol), acc[index]);
+        }
+      }
+    }
+  }
+}
+
+layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_id, tint_symbol_1.global_id, tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_id = gl_LocalInvocationID;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  inputs.global_id = gl_GlobalInvocationID;
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:60: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/922.wgsl.expected.glsl b/test/bug/tint/922.wgsl.expected.glsl
new file mode 100644
index 0000000..0fffaa7
--- /dev/null
+++ b/test/bug/tint/922.wgsl.expected.glsl
@@ -0,0 +1,182 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct Mat4x4_ {
+  vec4 mx;
+  vec4 my;
+  vec4 mz;
+  vec4 mw;
+};
+struct Mat4x3_ {
+  vec4 mx;
+  vec4 my;
+  vec4 mz;
+};
+struct Mat4x2_ {
+  vec4 mx;
+  vec4 my;
+};
+struct VertexOutput {
+  vec4 v_Color;
+  vec2 v_TexCoord;
+  vec4 member;
+};
+
+layout (binding = 0) uniform ub_SceneParams_1 {
+  Mat4x4_ u_Projection;
+} global;
+layout (binding = 1) uniform ub_MaterialParams_1 {
+  Mat4x2_ u_TexMtx[1];
+  vec4 u_Misc0_;
+} global1;
+layout (binding = 2) uniform ub_PacketParams_1 {
+  Mat4x3_ u_PosMtx[32];
+} global2;
+vec3 a_Position1 = vec3(0.0f, 0.0f, 0.0f);
+vec2 a_UV1 = vec2(0.0f, 0.0f);
+vec4 a_Color1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+vec3 a_Normal1 = vec3(0.0f, 0.0f, 0.0f);
+float a_PosMtxIdx1 = 0.0f;
+vec4 v_Color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+vec2 v_TexCoord = vec2(0.0f, 0.0f);
+vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+vec4 Mul(Mat4x4_ m8, vec4 v) {
+  Mat4x4_ m9 = Mat4x4_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 v1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  m9 = m8;
+  v1 = v;
+  return vec4(dot(m9.mx, v1), dot(m9.my, v1), dot(m9.mz, v1), dot(m9.mw, v1));
+}
+
+vec2 Mul2(Mat4x2_ m12, vec4 v4) {
+  Mat4x2_ m13 = Mat4x2_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 v5 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  m13 = m12;
+  v5 = v4;
+  return vec2(dot(m13.mx, v5), dot(m13.my, v5));
+}
+
+Mat4x4_ x_Mat4x4_(float n) {
+  float n1 = 0.0f;
+  Mat4x4_ o = Mat4x4_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  n1 = n;
+  o.mx = vec4(n1, 0.0f, 0.0f, 0.0f);
+  o.my = vec4(0.0f, n1, 0.0f, 0.0f);
+  o.mz = vec4(0.0f, 0.0f, n1, 0.0f);
+  o.mw = vec4(0.0f, 0.0f, 0.0f, n1);
+  return o;
+}
+
+Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) {
+  Mat4x3_ m17 = Mat4x3_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  Mat4x4_ o1 = Mat4x4_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  m17 = m16;
+  Mat4x4_ x_e4 = x_Mat4x4_(1.0f);
+  o1 = x_e4;
+  o1.mx = m17.mx;
+  o1.my = m17.my;
+  o1.mz = m17.mz;
+  return o1;
+}
+
+void main1() {
+  Mat4x3_ t_PosMtx = Mat4x3_(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec2 t_TexSpaceCoord = vec2(0.0f, 0.0f);
+  Mat4x3_ x_e18 = global2.u_PosMtx[int(a_PosMtxIdx1)];
+  t_PosMtx = x_e18;
+  Mat4x4_ x_e24 = x_Mat4x4_1(t_PosMtx);
+  vec3 x_e25 = a_Position1;
+  Mat4x4_ x_e30 = x_Mat4x4_1(t_PosMtx);
+  vec4 x_e34 = Mul(x_e30, vec4(a_Position1, 1.0f));
+  Mat4x4_ x_e35 = global.u_Projection;
+  Mat4x4_ x_e38 = x_Mat4x4_1(t_PosMtx);
+  vec3 x_e39 = a_Position1;
+  Mat4x4_ x_e44 = x_Mat4x4_1(t_PosMtx);
+  vec4 x_e48 = Mul(x_e44, vec4(a_Position1, 1.0f));
+  vec4 x_e49 = Mul(x_e35, x_e48);
+  tint_symbol = x_e49;
+  v_Color = a_Color1;
+  vec4 x_e52 = global1.u_Misc0_;
+  if ((x_e52.x == 2.0f)) {
+    {
+      vec3 x_e59 = a_Normal1;
+      Mat4x2_ x_e64 = global1.u_TexMtx[0];
+      vec2 x_e68 = Mul2(x_e64, vec4(a_Normal1, 1.0f));
+      v_TexCoord = x_e68.xy;
+      return;
+    }
+  } else {
+    {
+      vec2 x_e73 = a_UV1;
+      Mat4x2_ x_e79 = global1.u_TexMtx[0];
+      vec2 x_e84 = Mul2(x_e79, vec4(a_UV1, 1.0f, 1.0f));
+      v_TexCoord = x_e84.xy;
+      return;
+    }
+  }
+}
+
+struct tint_symbol_3 {
+  vec3 a_Position;
+  vec2 a_UV;
+  vec4 a_Color;
+  vec3 a_Normal;
+  float a_PosMtxIdx;
+};
+struct tint_symbol_4 {
+  vec4 v_Color;
+  vec2 v_TexCoord;
+  vec4 member;
+};
+
+VertexOutput tint_symbol_1_inner(vec3 a_Position, vec2 a_UV, vec4 a_Color, vec3 a_Normal, float a_PosMtxIdx) {
+  a_Position1 = a_Position;
+  a_UV1 = a_UV;
+  a_Color1 = a_Color;
+  a_Normal1 = a_Normal;
+  a_PosMtxIdx1 = a_PosMtxIdx;
+  main1();
+  VertexOutput tint_symbol_5 = VertexOutput(v_Color, v_TexCoord, tint_symbol);
+  return tint_symbol_5;
+}
+
+tint_symbol_4 tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  VertexOutput inner_result = tint_symbol_1_inner(tint_symbol_2.a_Position, tint_symbol_2.a_UV, tint_symbol_2.a_Color, tint_symbol_2.a_Normal, tint_symbol_2.a_PosMtxIdx);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec2(0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.v_Color = inner_result.v_Color;
+  wrapper_result.v_TexCoord = inner_result.v_TexCoord;
+  wrapper_result.member = inner_result.member;
+  return wrapper_result;
+}
+in vec3 a_Position;
+in vec2 a_UV;
+in vec4 a_Color;
+in vec3 a_Normal;
+in float a_PosMtxIdx;
+out vec4 v_Color;
+out vec2 v_TexCoord;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.a_Position = a_Position;
+  inputs.a_UV = a_UV;
+  inputs.a_Color = a_Color;
+  inputs.a_Normal = a_Normal;
+  inputs.a_PosMtxIdx = a_PosMtxIdx;
+  tint_symbol_4 outputs;
+  outputs = tint_symbol_1(inputs);
+  v_Color = outputs.v_Color;
+  v_TexCoord = outputs.v_TexCoord;
+  gl_Position = outputs.member;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:157: 'v_Color' : redefinition 
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/926.wgsl.expected.glsl b/test/bug/tint/926.wgsl.expected.glsl
new file mode 100644
index 0000000..e1fb812
--- /dev/null
+++ b/test/bug/tint/926.wgsl.expected.glsl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 5) buffer DrawIndirectArgs_1 {
+  uint vertexCount;
+} drawOut;
+uint cubeVerts = 0u;
+
+struct tint_symbol_1 {
+  uvec3 global_id;
+};
+
+void computeMain_inner(uvec3 global_id) {
+  uint atomic_result = 0u;
+  InterlockedAdd(drawOut.vertexCount, cubeVerts, atomic_result);
+  uint firstVertex = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void computeMain(tint_symbol_1 tint_symbol) {
+  computeMain_inner(tint_symbol.global_id);
+  return;
+}
+void main() {
+  tint_symbol_1 inputs;
+  inputs.global_id = gl_GlobalInvocationID;
+  computeMain(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:16: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:16: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/942.wgsl.expected.glsl b/test/bug/tint/942.wgsl.expected.glsl
new file mode 100644
index 0000000..5947312
--- /dev/null
+++ b/test/bug/tint/942.wgsl.expected.glsl
@@ -0,0 +1,104 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+
+layout (binding = 1) uniform Params_1 {
+  uint filterDim;
+  uint blockDim;
+} params;
+uniform highp sampler2D inputTex;
+uniform highp writeonly image2D outputTex;
+
+layout (binding = 3) uniform Flip_1 {
+  uint value;
+} flip;
+groupshared vec3 tile[4][256];
+
+struct tint_symbol_2 {
+  uvec3 LocalInvocationID;
+  uint local_invocation_index;
+  uvec3 WorkGroupID;
+};
+
+void tint_symbol_inner(uvec3 WorkGroupID, uvec3 LocalInvocationID, uint local_invocation_index) {
+  {
+    for(uint idx = local_invocation_index; (idx < 1024u); idx = (idx + 64u)) {
+      uint i_1 = (idx / 256u);
+      uint i_2 = (idx % 256u);
+      tile[i_1][i_2] = vec3(0.0f, 0.0f, 0.0f);
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  uint filterOffset = ((params.filterDim - 1u) / 2u);
+  ivec2 dims = textureSize(inputTex0);
+  ivec2 baseIndex = (ivec2(((WorkGroupID.xy * uvec2(params.blockDim, 4u)) + (LocalInvocationID.xy * uvec2(4u, 1u)))) - ivec2(int(filterOffset), 0));
+  {
+    for(uint r = 0u; (r < 4u); r = (r + 1u)) {
+      {
+        for(uint c = 0u; (c < 4u); c = (c + 1u)) {
+          ivec2 loadIndex = (baseIndex + ivec2(int(c), int(r)));
+          if ((flip.value != 0u)) {
+            loadIndex = loadIndex.yx;
+          }
+          tile[r][((4u * LocalInvocationID.x) + c)] = textureLod(inputTex, ((vec2(loadIndex) + vec2(0.25f, 0.25f)) / vec2(dims)), 0.0f).rgb;
+        }
+      }
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  {
+    for(uint r = 0u; (r < 4u); r = (r + 1u)) {
+      {
+        for(uint c = 0u; (c < 4u); c = (c + 1u)) {
+          ivec2 writeIndex = (baseIndex + ivec2(int(c), int(r)));
+          if ((flip.value != 0u)) {
+            writeIndex = writeIndex.yx;
+          }
+          uint center = ((4u * LocalInvocationID.x) + c);
+          bool tint_tmp_1 = (center >= filterOffset);
+          if (tint_tmp_1) {
+            tint_tmp_1 = (center < (256u - filterOffset));
+          }
+          bool tint_tmp = (tint_tmp_1);
+          if (tint_tmp) {
+            tint_tmp = all((writeIndex < dims));
+          }
+          if ((tint_tmp)) {
+            vec3 acc = vec3(0.0f, 0.0f, 0.0f);
+            {
+              for(uint f = 0u; (f < params.filterDim); f = (f + 1u)) {
+                uint i = ((center + f) - filterOffset);
+                acc = (acc + ((1.0f / float(params.filterDim)) * tile[r][i]));
+              }
+            }
+            imageStore(outputTex, writeIndex, vec4(acc, 1.0f)).x;
+          }
+        }
+      }
+    }
+  }
+}
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.WorkGroupID, tint_symbol_1.LocalInvocationID, tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.LocalInvocationID = gl_LocalInvocationID;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  inputs.WorkGroupID = gl_WorkGroupID;
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:16: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/943.spvasm.expected.glsl b/test/bug/tint/943.spvasm.expected.glsl
new file mode 100644
index 0000000..da855d3
--- /dev/null
+++ b/test/bug/tint/943.spvasm.expected.glsl
@@ -0,0 +1,402 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+int dimAOuter_1 = 0;
+layout (binding = 3) uniform Uniforms_1 {
+  float NAN;
+  ivec3 aShape;
+  ivec3 bShape;
+  ivec3 outShape;
+  ivec2 outShapeStrides;
+} x_48;
+int dimInner_1 = 0;
+int dimBOuter_1 = 0;
+layout (binding = 0) buffer ssbOut_1 {
+  float result[];
+} x_54;
+uvec3 tint_symbol = uvec3(0u, 0u, 0u);
+uvec3 tint_symbol_1 = uvec3(0u, 0u, 0u);
+groupshared float mm_Asub[64][64];
+groupshared float mm_Bsub[64][1];
+layout (binding = 1) buffer ssbA_1 {
+  float A[];
+} x_165;
+int batch = 0;
+layout (binding = 2) buffer ssbB_1 {
+  float B[];
+} x_185;
+
+bool coordsInBounds_vi2_vi2_(inout ivec2 coord, inout ivec2 shape) {
+  bool x_87 = false;
+  bool x_88_phi = false;
+  ivec2 x_76 = coord;
+  bool x_81 = all((x_76 >= ivec2(0, 0)));
+  x_88_phi = x_81;
+  if (x_81) {
+    ivec2 x_84 = coord;
+    ivec2 x_85 = shape;
+    x_87 = all((x_84 < x_85));
+    x_88_phi = x_87;
+  }
+  return x_88_phi;
+}
+
+float mm_readA_i1_i1_(inout int row, inout int col) {
+  int batchASize = 0;
+  ivec2 param_10 = ivec2(0, 0);
+  ivec2 param_11 = ivec2(0, 0);
+  float x_430 = 0.0f;
+  int x_417 = x_48.aShape.y;
+  int x_419 = x_48.aShape.z;
+  batchASize = (x_417 * x_419);
+  int x_421 = row;
+  int x_422 = col;
+  int x_424 = dimAOuter_1;
+  int x_425 = dimInner_1;
+  param_10 = ivec2(x_421, x_422);
+  param_11 = ivec2(x_424, x_425);
+  bool x_429 = coordsInBounds_vi2_vi2_(param_10, param_11);
+  if (x_429) {
+    int x_438 = batch;
+    int x_439 = batchASize;
+    int x_441 = row;
+    int x_442 = dimInner_1;
+    int x_445 = col;
+    float x_448 = x_165.A[(((x_438 * x_439) + (x_441 * x_442)) + x_445)];
+    x_430 = x_448;
+  } else {
+    x_430 = 0.0f;
+  }
+  return x_430;
+}
+
+float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
+  int batchBSize = 0;
+  ivec2 param_12 = ivec2(0, 0);
+  ivec2 param_13 = ivec2(0, 0);
+  float x_468 = 0.0f;
+  int x_455 = x_48.bShape.y;
+  int x_457 = x_48.bShape.z;
+  batchBSize = (x_455 * x_457);
+  int x_459 = row_1;
+  int x_460 = col_1;
+  int x_462 = dimInner_1;
+  int x_463 = dimBOuter_1;
+  param_12 = ivec2(x_459, x_460);
+  param_13 = ivec2(x_462, x_463);
+  bool x_467 = coordsInBounds_vi2_vi2_(param_12, param_13);
+  if (x_467) {
+    int x_475 = batch;
+    int x_476 = batchBSize;
+    int x_478 = row_1;
+    int x_479 = dimBOuter_1;
+    int x_482 = col_1;
+    float x_485 = x_185.B[(((x_475 * x_476) + (x_478 * x_479)) + x_482)];
+    x_468 = x_485;
+  } else {
+    x_468 = 0.0f;
+  }
+  return x_468;
+}
+
+int getOutputFlatIndex_vi3_(inout ivec3 coords) {
+  ivec3 x_99 = coords;
+  int x_105 = x_48.outShapeStrides.x;
+  int x_107 = x_48.outShapeStrides.y;
+  return int(dot(vec3(x_99), vec3(ivec3(x_105, x_107, 1))));
+}
+
+void setOutput_i1_f1_(inout int flatIndex, inout float value) {
+  int x_95 = flatIndex;
+  float x_96 = value;
+  x_54.result[x_95] = x_96;
+  return;
+}
+
+void setOutput_i1_i1_i1_f1_(inout int d0, inout int d1, inout int d2, inout float value_1) {
+  int flatIndex_1 = 0;
+  ivec3 param = ivec3(0, 0, 0);
+  int param_1 = 0;
+  float param_2 = 0.0f;
+  int x_115 = d0;
+  int x_116 = d1;
+  int x_117 = d2;
+  param = ivec3(x_115, x_116, x_117);
+  int x_120 = getOutputFlatIndex_vi3_(param);
+  flatIndex_1 = x_120;
+  param_1 = flatIndex_1;
+  float x_124 = value_1;
+  param_2 = x_124;
+  setOutput_i1_f1_(param_1, param_2);
+  return;
+}
+
+void mm_write_i1_i1_f1_(inout int row_2, inout int col_2, inout float value_2) {
+  ivec3 outCoord = ivec3(0, 0, 0);
+  int param_14 = 0;
+  int param_15 = 0;
+  int param_16 = 0;
+  float param_17 = 0.0f;
+  int x_491 = batch;
+  int x_492 = row_2;
+  int x_493 = col_2;
+  outCoord = ivec3(x_491, x_492, x_493);
+  param_14 = batch;
+  int x_498 = row_2;
+  param_15 = x_498;
+  int x_500 = col_2;
+  param_16 = x_500;
+  float x_502 = value_2;
+  param_17 = x_502;
+  setOutput_i1_i1_i1_f1_(param_14, param_15, param_16, param_17);
+  return;
+}
+
+void mm_matMul_i1_i1_i1_(inout int dimAOuter, inout int dimInner, inout int dimBOuter) {
+  int tileRow = 0;
+  int tileCol = 0;
+  int globalRow = 0;
+  int globalCol = 0;
+  int numTiles = 0;
+  int innerRow = 0;
+  int innerCol = 0;
+  float acc[1][1] = float[1][1](float[1](0.0f));
+  int tileColA = 0;
+  int tileRowB = 0;
+  int t = 0;
+  int innerRow_1 = 0;
+  int innerCol_1 = 0;
+  int inputRow = 0;
+  int inputCol = 0;
+  int param_3 = 0;
+  int param_4 = 0;
+  int innerRow_2 = 0;
+  int innerCol_2 = 0;
+  int inputRow_1 = 0;
+  int inputCol_1 = 0;
+  int param_5 = 0;
+  int param_6 = 0;
+  int k = 0;
+  int inner = 0;
+  float BCached[1] = float[1](0.0f);
+  int innerRow_3 = 0;
+  float ACached = 0.0f;
+  int innerCol_3 = 0;
+  int innerRow_4 = 0;
+  int innerCol_4 = 0;
+  int param_7 = 0;
+  int param_8 = 0;
+  float param_9 = 0.0f;
+  uint x_132 = tint_symbol.y;
+  tileRow = (int(x_132) * 1);
+  uint x_137 = tint_symbol.x;
+  tileCol = (int(x_137) * 1);
+  uint x_143 = tint_symbol_1.y;
+  globalRow = (int(x_143) * 1);
+  uint x_148 = tint_symbol_1.x;
+  globalCol = (int(x_148) * 1);
+  int x_152 = dimInner;
+  numTiles = (((x_152 - 1) / 64) + 1);
+  innerRow = 0;
+  {
+    for(; (innerRow < 1); innerRow = (innerRow + 1)) {
+      innerCol = 0;
+      {
+        for(; (innerCol < 1); innerCol = (innerCol + 1)) {
+          acc[innerRow][innerCol] = 0.0f;
+        }
+      }
+    }
+  }
+  uint x_187 = tint_symbol.x;
+  tileColA = (int(x_187) * 64);
+  uint x_192 = tint_symbol.y;
+  tileRowB = (int(x_192) * 1);
+  t = 0;
+  {
+    for(; (t < numTiles); t = (t + 1)) {
+      innerRow_1 = 0;
+      {
+        for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
+          innerCol_1 = 0;
+          {
+            for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
+              inputRow = (tileRow + innerRow_1);
+              inputCol = (tileColA + innerCol_1);
+              int x_233 = inputRow;
+              int x_234 = inputCol;
+              int x_238 = t;
+              int x_240 = inputCol;
+              param_3 = (globalRow + innerRow_1);
+              param_4 = ((x_238 * 64) + x_240);
+              float x_244 = mm_readA_i1_i1_(param_3, param_4);
+              mm_Asub[x_233][x_234] = x_244;
+            }
+          }
+        }
+      }
+      innerRow_2 = 0;
+      {
+        for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
+          innerCol_2 = 0;
+          {
+            for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
+              inputRow_1 = (tileRowB + innerRow_2);
+              inputCol_1 = (tileCol + innerCol_2);
+              int x_278 = inputRow_1;
+              int x_279 = inputCol_1;
+              int x_284 = globalCol;
+              int x_285 = innerCol_2;
+              param_5 = ((t * 64) + inputRow_1);
+              param_6 = (x_284 + x_285);
+              float x_289 = mm_readB_i1_i1_(param_5, param_6);
+              mm_Bsub[x_278][x_279] = x_289;
+            }
+          }
+        }
+      }
+      GroupMemoryBarrierWithGroupSync();
+      k = 0;
+      {
+        for(; (k < 64); k = (k + 1)) {
+          inner = 0;
+          {
+            for(; (inner < 1); inner = (inner + 1)) {
+              int x_314 = inner;
+              float x_320 = mm_Bsub[k][(tileCol + inner)];
+              BCached[x_314] = x_320;
+            }
+          }
+          innerRow_3 = 0;
+          {
+            for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
+              float x_338 = mm_Asub[(tileRow + innerRow_3)][k];
+              ACached = x_338;
+              innerCol_3 = 0;
+              {
+                for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
+                  int x_347 = innerRow_3;
+                  int x_348 = innerCol_3;
+                  float x_349 = ACached;
+                  float x_352 = BCached[innerCol_3];
+                  float x_355 = acc[x_347][x_348];
+                  acc[x_347][x_348] = (x_355 + (x_349 * x_352));
+                }
+              }
+            }
+          }
+        }
+      }
+      GroupMemoryBarrierWithGroupSync();
+    }
+  }
+  innerRow_4 = 0;
+  {
+    for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
+      innerCol_4 = 0;
+      while (true) {
+        bool x_393 = false;
+        bool x_394_phi = false;
+        if ((innerCol_4 < 1)) {
+        } else {
+          break;
+        }
+        int x_382 = globalCol;
+        int x_383 = innerCol_4;
+        int x_385 = dimBOuter;
+        bool x_386 = ((x_382 + x_383) < x_385);
+        x_394_phi = x_386;
+        if (x_386) {
+          int x_389 = globalRow;
+          int x_390 = innerRow_4;
+          int x_392 = dimAOuter;
+          x_393 = ((x_389 + x_390) < x_392);
+          x_394_phi = x_393;
+        }
+        if (x_394_phi) {
+          int x_400 = globalCol;
+          int x_401 = innerCol_4;
+          int x_403 = innerRow_4;
+          int x_404 = innerCol_4;
+          param_7 = (globalRow + innerRow_4);
+          param_8 = (x_400 + x_401);
+          float x_409 = acc[x_403][x_404];
+          param_9 = x_409;
+          mm_write_i1_i1_f1_(param_7, param_8, param_9);
+        }
+        {
+          innerCol_4 = (innerCol_4 + 1);
+        }
+      }
+    }
+  }
+  return;
+}
+
+void main_1() {
+  int param_18 = 0;
+  int param_19 = 0;
+  int param_20 = 0;
+  int x_67 = x_48.aShape.y;
+  dimAOuter_1 = x_67;
+  int x_71 = x_48.aShape.z;
+  dimInner_1 = x_71;
+  int x_75 = x_48.bShape.z;
+  dimBOuter_1 = x_75;
+  uint x_505 = tint_symbol_1.z;
+  batch = int(x_505);
+  param_18 = dimAOuter_1;
+  param_19 = dimInner_1;
+  param_20 = dimBOuter_1;
+  mm_matMul_i1_i1_i1_(param_18, param_19, param_20);
+  return;
+}
+
+struct tint_symbol_4 {
+  uvec3 gl_LocalInvocationID_param;
+  uint local_invocation_index;
+  uvec3 gl_GlobalInvocationID_param;
+};
+
+void tint_symbol_2_inner(uvec3 gl_LocalInvocationID_param, uvec3 gl_GlobalInvocationID_param, uint local_invocation_index) {
+  {
+    uint i_1 = local_invocation_index;
+    uint i_2 = (local_invocation_index % 1u);
+    mm_Bsub[i_1][i_2] = 0.0f;
+  }
+  {
+    for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 64u)) {
+      uint i = (idx / 64u);
+      uint i_1 = (idx % 64u);
+      mm_Asub[i][i_1] = 0.0f;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+  tint_symbol = gl_LocalInvocationID_param;
+  tint_symbol_1 = gl_GlobalInvocationID_param;
+  main_1();
+}
+
+layout(local_size_x = 1, local_size_y = 64, local_size_z = 1) in;
+void tint_symbol_2(tint_symbol_4 tint_symbol_3) {
+  tint_symbol_2_inner(tint_symbol_3.gl_LocalInvocationID_param, tint_symbol_3.gl_GlobalInvocationID_param, tint_symbol_3.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_4 inputs;
+  inputs.gl_LocalInvocationID_param = gl_LocalInvocationID;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  inputs.gl_GlobalInvocationID_param = gl_GlobalInvocationID;
+  tint_symbol_2(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:20: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/948.wgsl.expected.glsl b/test/bug/tint/948.wgsl.expected.glsl
new file mode 100644
index 0000000..a34da83
--- /dev/null
+++ b/test/bug/tint/948.wgsl.expected.glsl
@@ -0,0 +1,227 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 9) uniform LeftOver_1 {
+  float time;
+  uint padding;
+  mat4 worldViewProjection;
+  vec2 outputSize;
+  vec2 stageSize;
+  vec2 spriteMapSize;
+  float stageScale;
+  float spriteCount;
+  vec3 colorMul;
+} x_20;
+uniform highp sampler2D frameMapTexture;
+
+vec2 tUV = vec2(0.0f, 0.0f);
+uniform highp sampler2D tileMapsTexture0;
+
+uniform highp sampler2D tileMapsTexture1;
+uniform highp sampler2D animationMapTexture;
+
+float mt = 0.0f;
+uniform highp sampler2D spriteSheetTexture;
+
+vec4 glFragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+vec2 tileID_1 = vec2(0.0f, 0.0f);
+vec2 levelUnits = vec2(0.0f, 0.0f);
+vec2 stageUnits_1 = vec2(0.0f, 0.0f);
+vec3 vPosition = vec3(0.0f, 0.0f, 0.0f);
+vec2 vUV = vec2(0.0f, 0.0f);
+
+mat4 getFrameData_f1_(inout float frameID) {
+  float fX = 0.0f;
+  float x_15 = frameID;
+  float x_25 = x_20.spriteCount;
+  fX = (x_15 / x_25);
+  vec4 x_40 = texture(frameMapTexture, vec2(fX, 0.0f), 0.0f);
+  vec4 x_47 = texture(frameMapTexture, vec2(fX, 0.25f), 0.0f);
+  vec4 x_54 = texture(frameMapTexture, vec2(fX, 0.5f), 0.0f);
+  return mat4(vec4(x_40.x, x_40.y, x_40.z, x_40.w), vec4(x_47.x, x_47.y, x_47.z, x_47.w), vec4(x_54.x, x_54.y, x_54.z, x_54.w), vec4(vec4(0.0f, 0.0f, 0.0f, 0.0f).x, vec4(0.0f, 0.0f, 0.0f, 0.0f).y, vec4(0.0f, 0.0f, 0.0f, 0.0f).z, vec4(0.0f, 0.0f, 0.0f, 0.0f).w));
+}
+
+void main_1() {
+  vec4 color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec2 tileUV = vec2(0.0f, 0.0f);
+  vec2 tileID = vec2(0.0f, 0.0f);
+  vec2 sheetUnits = vec2(0.0f, 0.0f);
+  float spriteUnits = 0.0f;
+  vec2 stageUnits = vec2(0.0f, 0.0f);
+  int i = 0;
+  float frameID_1 = 0.0f;
+  vec4 animationData = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  float f = 0.0f;
+  mat4 frameData = mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float param = 0.0f;
+  vec2 frameSize = vec2(0.0f, 0.0f);
+  vec2 offset_1 = vec2(0.0f, 0.0f);
+  vec2 ratio = vec2(0.0f, 0.0f);
+  vec4 nc = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  float alpha = 0.0f;
+  vec3 mixed = vec3(0.0f, 0.0f, 0.0f);
+  color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  tileUV = frac(tUV);
+  float x_91 = tileUV.y;
+  tileUV.y = (1.0f - x_91);
+  tileID = floor(tUV);
+  vec2 x_101 = x_20.spriteMapSize;
+  sheetUnits = (vec2(1.0f, 1.0f) / x_101);
+  float x_106 = x_20.spriteCount;
+  spriteUnits = (1.0f / x_106);
+  vec2 x_111 = x_20.stageSize;
+  stageUnits = (vec2(1.0f, 1.0f) / x_111);
+  i = 0;
+  {
+    for(; (i < 2); i = (i + 1)) {
+      switch(i) {
+        case 1: {
+          vec2 x_150 = tileID;
+          vec2 x_154 = x_20.stageSize;
+          vec4 x_156 = texture(tileMapsTexture1, ((x_150 + vec2(0.5f, 0.5f)) / x_154), 0.0f);
+          frameID_1 = x_156.x;
+          break;
+        }
+        case 0: {
+          vec2 x_136 = tileID;
+          vec2 x_140 = x_20.stageSize;
+          vec4 x_142 = texture(tileMapsTexture0, ((x_136 + vec2(0.5f, 0.5f)) / x_140), 0.0f);
+          frameID_1 = x_142.x;
+          break;
+        }
+        default: {
+          break;
+        }
+      }
+      float x_166 = frameID_1;
+      float x_169 = x_20.spriteCount;
+      vec4 x_172 = texture(animationMapTexture, vec2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
+      animationData = x_172;
+      float x_174 = animationData.y;
+      if ((x_174 > 0.0f)) {
+        float x_181 = x_20.time;
+        float x_184 = animationData.z;
+        mt = ((x_181 * x_184) % 1.0f);
+        f = 0.0f;
+        {
+          for(; (f < 8.0f); f = (f + 1.0f)) {
+            float x_197 = animationData.y;
+            if ((x_197 > mt)) {
+              float x_203 = animationData.x;
+              frameID_1 = x_203;
+              break;
+            }
+            float x_208 = frameID_1;
+            float x_211 = x_20.spriteCount;
+            vec4 x_217 = texture(animationMapTexture, vec2(((x_208 + 0.5f) / x_211), (0.125f * f)), 0.0f);
+            animationData = x_217;
+          }
+        }
+      }
+      param = (frameID_1 + 0.5f);
+      mat4 x_225 = getFrameData_f1_(param);
+      frameData = x_225;
+      vec4 x_228 = frameData[0];
+      vec2 x_231 = x_20.spriteMapSize;
+      frameSize = (vec2(x_228.w, x_228.z) / x_231);
+      vec4 x_235 = frameData[0];
+      offset_1 = (vec2(x_235.x, x_235.y) * sheetUnits);
+      vec4 x_241 = frameData[2];
+      vec4 x_244 = frameData[0];
+      ratio = (vec2(x_241.x, x_241.y) / vec2(x_244.w, x_244.z));
+      float x_248 = frameData[2].z;
+      if ((x_248 == 1.0f)) {
+        vec2 x_252 = tileUV;
+        tileUV = vec2(x_252.y, x_252.x);
+      }
+      if ((i == 0)) {
+        vec4 x_268 = texture(spriteSheetTexture, ((tileUV * frameSize) + offset_1));
+        color = x_268;
+      } else {
+        vec4 x_279 = texture(spriteSheetTexture, ((tileUV * frameSize) + offset_1));
+        nc = x_279;
+        float x_283 = color.w;
+        float x_285 = nc.w;
+        alpha = min((x_283 + x_285), 1.0f);
+        vec4 x_290 = color;
+        vec4 x_292 = nc;
+        float x_295 = nc.w;
+        mixed = mix(vec3(x_290.x, x_290.y, x_290.z), vec3(x_292.x, x_292.y, x_292.z), vec3(x_295, x_295, x_295));
+        vec3 x_298 = mixed;
+        color = vec4(x_298.x, x_298.y, x_298.z, alpha);
+      }
+    }
+  }
+  vec3 x_310 = x_20.colorMul;
+  vec4 x_311 = color;
+  vec3 x_313 = (vec3(x_311.x, x_311.y, x_311.z) * x_310);
+  color = vec4(x_313.x, x_313.y, x_313.z, color.w);
+  glFragColor = color;
+  return;
+}
+
+struct main_out {
+  vec4 glFragColor_1;
+};
+struct tint_symbol_2 {
+  vec3 vPosition_param;
+  vec2 vUV_param;
+  vec2 tUV_param;
+  vec2 stageUnits_1_param;
+  vec2 levelUnits_param;
+  vec2 tileID_1_param;
+};
+struct tint_symbol_3 {
+  vec4 glFragColor_1;
+};
+
+main_out tint_symbol_inner(vec2 tUV_param, vec2 tileID_1_param, vec2 levelUnits_param, vec2 stageUnits_1_param, vec3 vPosition_param, vec2 vUV_param) {
+  tUV = tUV_param;
+  tileID_1 = tileID_1_param;
+  levelUnits = levelUnits_param;
+  stageUnits_1 = stageUnits_1_param;
+  vPosition = vPosition_param;
+  vUV = vUV_param;
+  main_1();
+  main_out tint_symbol_4 = main_out(glFragColor);
+  return tint_symbol_4;
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  main_out inner_result = tint_symbol_inner(tint_symbol_1.tUV_param, tint_symbol_1.tileID_1_param, tint_symbol_1.levelUnits_param, tint_symbol_1.stageUnits_1_param, tint_symbol_1.vPosition_param, tint_symbol_1.vUV_param);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.glFragColor_1 = inner_result.glFragColor_1;
+  return wrapper_result;
+}
+in vec3 vPosition_param;
+in vec2 vUV_param;
+in vec2 tUV_param;
+in vec2 stageUnits_1_param;
+in vec2 levelUnits_param;
+in vec2 tileID_1_param;
+out vec4 glFragColor_1;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.vPosition_param = vPosition_param;
+  inputs.vUV_param = vUV_param;
+  inputs.tUV_param = tUV_param;
+  inputs.stageUnits_1_param = stageUnits_1_param;
+  inputs.levelUnits_param = levelUnits_param;
+  inputs.tileID_1_param = tileID_1_param;
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  glFragColor_1 = outputs.glFragColor_1;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:65: 'frac' : no matching overloaded function found 
+ERROR: 0:65: 'assign' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
+ERROR: 0:65: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/949.wgsl.expected.glsl b/test/bug/tint/949.wgsl.expected.glsl
new file mode 100644
index 0000000..1c68b7d
--- /dev/null
+++ b/test/bug/tint/949.wgsl.expected.glsl
@@ -0,0 +1,386 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct lightingInfo {
+  vec3 diffuse;
+  vec3 specular;
+};
+
+float u_Float = 0.0f;
+vec3 u_Color = vec3(0.0f, 0.0f, 0.0f);
+uniform highp sampler2D TextureSamplerTexture;
+
+vec2 vMainuv = vec2(0.0f, 0.0f);
+layout (binding = 6) uniform LeftOver_1 {
+  mat4 u_World;
+  mat4 u_ViewProjection;
+  float u_bumpStrength;
+  uint padding;
+  vec3 u_cameraPosition;
+  float u_parallaxScale;
+  float textureInfoName;
+  uint padding_1;
+  vec2 tangentSpaceParameter0;
+} x_269;
+vec4 v_output1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+bool tint_symbol = false;
+vec2 v_uv = vec2(0.0f, 0.0f);
+vec4 v_output2 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+uniform highp sampler2D TextureSampler1Texture;
+
+layout (binding = 5) uniform Light0_1 {
+  vec4 vLightData;
+  vec4 vLightDiffuse;
+  vec4 vLightSpecular;
+  vec3 vLightGround;
+  uint padding_2;
+  vec4 shadowsInfo;
+  vec2 depthValues;
+} light0;
+vec4 glFragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+mat3 cotangent_frame_vf3_vf3_vf2_vf2_(inout vec3 normal_1, inout vec3 p, inout vec2 uv, inout vec2 tangentSpaceParams) {
+  vec3 dp1 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 dp2 = vec3(0.0f, 0.0f, 0.0f);
+  vec2 duv1 = vec2(0.0f, 0.0f);
+  vec2 duv2 = vec2(0.0f, 0.0f);
+  vec3 dp2perp = vec3(0.0f, 0.0f, 0.0f);
+  vec3 dp1perp = vec3(0.0f, 0.0f, 0.0f);
+  vec3 tangent = vec3(0.0f, 0.0f, 0.0f);
+  vec3 bitangent = vec3(0.0f, 0.0f, 0.0f);
+  float invmax = 0.0f;
+  vec3 x_133 = p;
+  dp1 = ddx(x_133);
+  vec3 x_136 = p;
+  dp2 = ddy(x_136);
+  vec2 x_139 = uv;
+  duv1 = ddx(x_139);
+  vec2 x_142 = uv;
+  duv2 = ddy(x_142);
+  vec3 x_145 = dp2;
+  vec3 x_146 = normal_1;
+  dp2perp = cross(x_145, x_146);
+  vec3 x_149 = normal_1;
+  dp1perp = cross(x_149, dp1);
+  vec3 x_153 = dp2perp;
+  float x_155 = duv1.x;
+  vec3 x_157 = dp1perp;
+  float x_159 = duv2.x;
+  tangent = ((x_153 * x_155) + (x_157 * x_159));
+  vec3 x_163 = dp2perp;
+  float x_165 = duv1.y;
+  vec3 x_167 = dp1perp;
+  float x_169 = duv2.y;
+  bitangent = ((x_163 * x_165) + (x_167 * x_169));
+  float x_173 = tangentSpaceParams.x;
+  tangent = (tangent * x_173);
+  float x_177 = tangentSpaceParams.y;
+  bitangent = (bitangent * x_177);
+  invmax = rsqrt(max(dot(tangent, tangent), dot(bitangent, bitangent)));
+  vec3 x_191 = (tangent * invmax);
+  vec3 x_194 = (bitangent * invmax);
+  vec3 x_195 = normal_1;
+  return mat3(vec3(x_191.x, x_191.y, x_191.z), vec3(x_194.x, x_194.y, x_194.z), vec3(x_195.x, x_195.y, x_195.z));
+}
+
+mat3 transposeMat3_mf33_(inout mat3 inMatrix) {
+  vec3 i0 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 i1 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 i2 = vec3(0.0f, 0.0f, 0.0f);
+  mat3 outMatrix = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 x_60 = inMatrix[0];
+  i0 = x_60;
+  vec3 x_64 = inMatrix[1];
+  i1 = x_64;
+  vec3 x_68 = inMatrix[2];
+  i2 = x_68;
+  float x_73 = i0.x;
+  float x_75 = i1.x;
+  float x_77 = i2.x;
+  vec3 x_78 = vec3(x_73, x_75, x_77);
+  float x_81 = i0.y;
+  float x_83 = i1.y;
+  float x_85 = i2.y;
+  vec3 x_86 = vec3(x_81, x_83, x_85);
+  float x_89 = i0.z;
+  float x_91 = i1.z;
+  float x_93 = i2.z;
+  vec3 x_94 = vec3(x_89, x_91, x_93);
+  outMatrix = mat3(vec3(x_78.x, x_78.y, x_78.z), vec3(x_86.x, x_86.y, x_86.z), vec3(x_94.x, x_94.y, x_94.z));
+  return outMatrix;
+}
+
+vec3 perturbNormalBase_mf33_vf3_f1_(inout mat3 cotangentFrame, inout vec3 normal, inout float scale) {
+  mat3 x_113 = cotangentFrame;
+  vec3 x_114 = normal;
+  return normalize((x_113 * x_114));
+}
+
+vec3 perturbNormal_mf33_vf3_f1_(inout mat3 cotangentFrame_1, inout vec3 textureSample, inout float scale_1) {
+  mat3 param = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 param_1 = vec3(0.0f, 0.0f, 0.0f);
+  float param_2 = 0.0f;
+  vec3 x_119 = textureSample;
+  mat3 x_125 = cotangentFrame_1;
+  param = x_125;
+  param_1 = ((x_119 * 2.0f) - vec3(1.0f, 1.0f, 1.0f));
+  float x_128 = scale_1;
+  param_2 = x_128;
+  vec3 x_129 = perturbNormalBase_mf33_vf3_f1_(param, param_1, param_2);
+  return x_129;
+}
+
+lightingInfo computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(inout vec3 viewDirectionW, inout vec3 vNormal, inout vec4 lightData, inout vec3 diffuseColor, inout vec3 specularColor, inout vec3 groundColor, inout float glossiness) {
+  float ndl = 0.0f;
+  lightingInfo result = lightingInfo(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+  vec3 angleW = vec3(0.0f, 0.0f, 0.0f);
+  float specComp = 0.0f;
+  vec3 x_212 = vNormal;
+  vec4 x_213 = lightData;
+  ndl = ((dot(x_212, vec3(x_213.x, x_213.y, x_213.z)) * 0.5f) + 0.5f);
+  vec3 x_220 = groundColor;
+  vec3 x_221 = diffuseColor;
+  float x_222 = ndl;
+  result.diffuse = mix(x_220, x_221, vec3(x_222, x_222, x_222));
+  vec3 x_227 = viewDirectionW;
+  vec4 x_228 = lightData;
+  angleW = normalize((x_227 + vec3(x_228.x, x_228.y, x_228.z)));
+  vec3 x_233 = vNormal;
+  specComp = max(0.0f, dot(x_233, angleW));
+  float x_237 = specComp;
+  float x_238 = glossiness;
+  specComp = pow(x_237, max(1.0f, x_238));
+  float x_241 = specComp;
+  vec3 x_242 = specularColor;
+  result.specular = (x_242 * x_241);
+  return result;
+}
+
+void main_1() {
+  vec4 tempTextureRead = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 rgb = vec3(0.0f, 0.0f, 0.0f);
+  vec3 output5 = vec3(0.0f, 0.0f, 0.0f);
+  vec4 output4 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec2 uvOffset = vec2(0.0f, 0.0f);
+  float normalScale = 0.0f;
+  vec2 TBNUV = vec2(0.0f, 0.0f);
+  vec2 x_299 = vec2(0.0f, 0.0f);
+  mat3 TBN = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 param_3 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 param_4 = vec3(0.0f, 0.0f, 0.0f);
+  vec2 param_5 = vec2(0.0f, 0.0f);
+  vec2 param_6 = vec2(0.0f, 0.0f);
+  mat3 invTBN = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  mat3 param_7 = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float parallaxLimit = 0.0f;
+  vec2 vOffsetDir = vec2(0.0f, 0.0f);
+  vec2 vMaxOffset = vec2(0.0f, 0.0f);
+  float numSamples = 0.0f;
+  float stepSize = 0.0f;
+  float currRayHeight = 0.0f;
+  vec2 vCurrOffset = vec2(0.0f, 0.0f);
+  vec2 vLastOffset = vec2(0.0f, 0.0f);
+  float lastSampledHeight = 0.0f;
+  float currSampledHeight = 0.0f;
+  int i = 0;
+  float delta1 = 0.0f;
+  float delta2 = 0.0f;
+  float ratio = 0.0f;
+  vec2 parallaxOcclusion_0 = vec2(0.0f, 0.0f);
+  mat3 param_8 = mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 param_9 = vec3(0.0f, 0.0f, 0.0f);
+  float param_10 = 0.0f;
+  vec2 output6 = vec2(0.0f, 0.0f);
+  vec4 tempTextureRead1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 rgb1 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 viewDirectionW_1 = vec3(0.0f, 0.0f, 0.0f);
+  float shadow = 0.0f;
+  float glossiness_1 = 0.0f;
+  vec3 diffuseBase = vec3(0.0f, 0.0f, 0.0f);
+  vec3 specularBase = vec3(0.0f, 0.0f, 0.0f);
+  vec3 normalW = vec3(0.0f, 0.0f, 0.0f);
+  lightingInfo info = lightingInfo(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+  vec3 param_11 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 param_12 = vec3(0.0f, 0.0f, 0.0f);
+  vec4 param_13 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec3 param_14 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 param_15 = vec3(0.0f, 0.0f, 0.0f);
+  vec3 param_16 = vec3(0.0f, 0.0f, 0.0f);
+  float param_17 = 0.0f;
+  vec3 diffuseOutput = vec3(0.0f, 0.0f, 0.0f);
+  vec3 specularOutput = vec3(0.0f, 0.0f, 0.0f);
+  vec3 output3 = vec3(0.0f, 0.0f, 0.0f);
+  u_Float = 100.0f;
+  u_Color = vec3(0.5f, 0.5f, 0.5f);
+  vec4 x_262 = texture(TextureSamplerTexture, vMainuv);
+  tempTextureRead = x_262;
+  vec4 x_264 = tempTextureRead;
+  float x_273 = x_269.textureInfoName;
+  rgb = (vec3(x_264.x, x_264.y, x_264.z) * x_273);
+  vec3 x_279 = x_269.u_cameraPosition;
+  vec4 x_282 = v_output1;
+  output5 = normalize((x_279 - vec3(x_282.x, x_282.y, x_282.z)));
+  output4 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  uvOffset = vec2(0.0f, 0.0f);
+  float x_292 = x_269.u_bumpStrength;
+  normalScale = (1.0f / x_292);
+  if (tint_symbol) {
+    x_299 = v_uv;
+  } else {
+    x_299 = -(v_uv);
+  }
+  TBNUV = x_299;
+  vec4 x_310 = v_output2;
+  param_3 = (vec3(x_310.x, x_310.y, x_310.z) * normalScale);
+  vec4 x_317 = v_output1;
+  param_4 = vec3(x_317.x, x_317.y, x_317.z);
+  param_5 = TBNUV;
+  vec2 x_324 = x_269.tangentSpaceParameter0;
+  param_6 = x_324;
+  mat3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
+  TBN = x_325;
+  param_7 = TBN;
+  mat3 x_329 = transposeMat3_mf33_(param_7);
+  invTBN = x_329;
+  vec3 x_334 = (invTBN * -(output5));
+  parallaxLimit = (length(vec2(x_334.x, x_334.y)) / (invTBN * -(output5)).z);
+  float x_345 = x_269.u_parallaxScale;
+  parallaxLimit = (parallaxLimit * x_345);
+  vec3 x_352 = (invTBN * -(output5));
+  vOffsetDir = normalize(vec2(x_352.x, x_352.y));
+  vMaxOffset = (vOffsetDir * parallaxLimit);
+  vec4 x_366 = v_output2;
+  numSamples = (15.0f + (dot((invTBN * -(output5)), (invTBN * vec3(x_366.x, x_366.y, x_366.z))) * -11.0f));
+  stepSize = (1.0f / numSamples);
+  currRayHeight = 1.0f;
+  vCurrOffset = vec2(0.0f, 0.0f);
+  vLastOffset = vec2(0.0f, 0.0f);
+  lastSampledHeight = 1.0f;
+  currSampledHeight = 1.0f;
+  i = 0;
+  {
+    for(; (i < 15); i = (i + 1)) {
+      vec4 x_397 = texture(TextureSamplerTexture, (v_uv + vCurrOffset));
+      currSampledHeight = x_397.w;
+      if ((currSampledHeight > currRayHeight)) {
+        delta1 = (currSampledHeight - currRayHeight);
+        delta2 = ((currRayHeight + stepSize) - lastSampledHeight);
+        ratio = (delta1 / (delta1 + delta2));
+        vCurrOffset = ((vLastOffset * ratio) + (vCurrOffset * (1.0f - ratio)));
+        break;
+      } else {
+        currRayHeight = (currRayHeight - stepSize);
+        vLastOffset = vCurrOffset;
+        vCurrOffset = (vCurrOffset + (vMaxOffset * stepSize));
+        lastSampledHeight = currSampledHeight;
+      }
+    }
+  }
+  parallaxOcclusion_0 = vCurrOffset;
+  uvOffset = parallaxOcclusion_0;
+  vec4 x_452 = texture(TextureSamplerTexture, (v_uv + uvOffset));
+  float x_454 = x_269.u_bumpStrength;
+  param_8 = TBN;
+  param_9 = vec3(x_452.x, x_452.y, x_452.z);
+  param_10 = (1.0f / x_454);
+  vec3 x_461 = perturbNormal_mf33_vf3_f1_(param_8, param_9, param_10);
+  output4 = vec4(x_461.x, x_461.y, x_461.z, output4.w);
+  output6 = (v_uv + uvOffset);
+  vec4 x_475 = texture(TextureSampler1Texture, output6);
+  tempTextureRead1 = x_475;
+  vec4 x_477 = tempTextureRead1;
+  rgb1 = vec3(x_477.x, x_477.y, x_477.z);
+  vec3 x_481 = x_269.u_cameraPosition;
+  vec4 x_482 = v_output1;
+  viewDirectionW_1 = normalize((x_481 - vec3(x_482.x, x_482.y, x_482.z)));
+  shadow = 1.0f;
+  glossiness_1 = (1.0f * u_Float);
+  diffuseBase = vec3(0.0f, 0.0f, 0.0f);
+  specularBase = vec3(0.0f, 0.0f, 0.0f);
+  vec4 x_494 = output4;
+  normalW = vec3(x_494.x, x_494.y, x_494.z);
+  param_11 = viewDirectionW_1;
+  param_12 = normalW;
+  vec4 x_507 = light0.vLightData;
+  param_13 = x_507;
+  vec4 x_510 = light0.vLightDiffuse;
+  param_14 = vec3(x_510.x, x_510.y, x_510.z);
+  vec4 x_514 = light0.vLightSpecular;
+  param_15 = vec3(x_514.x, x_514.y, x_514.z);
+  vec3 x_518 = light0.vLightGround;
+  param_16 = x_518;
+  param_17 = glossiness_1;
+  lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
+  info = x_521;
+  shadow = 1.0f;
+  vec3 x_523 = info.diffuse;
+  diffuseBase = (diffuseBase + (x_523 * shadow));
+  vec3 x_529 = info.specular;
+  specularBase = (specularBase + (x_529 * shadow));
+  diffuseOutput = (diffuseBase * rgb1);
+  specularOutput = (specularBase * u_Color);
+  output3 = (diffuseOutput + specularOutput);
+  vec3 x_548 = output3;
+  glFragColor = vec4(x_548.x, x_548.y, x_548.z, 1.0f);
+  return;
+}
+
+struct main_out {
+  vec4 glFragColor_1;
+};
+struct tint_symbol_3 {
+  vec4 v_output1_param;
+  vec2 vMainuv_param;
+  vec4 v_output2_param;
+  vec2 v_uv_param;
+  bool gl_FrontFacing_param;
+};
+struct tint_symbol_4 {
+  vec4 glFragColor_1;
+};
+
+main_out tint_symbol_1_inner(vec2 vMainuv_param, vec4 v_output1_param, bool gl_FrontFacing_param, vec2 v_uv_param, vec4 v_output2_param) {
+  vMainuv = vMainuv_param;
+  v_output1 = v_output1_param;
+  tint_symbol = gl_FrontFacing_param;
+  v_uv = v_uv_param;
+  v_output2 = v_output2_param;
+  main_1();
+  main_out tint_symbol_5 = main_out(glFragColor);
+  return tint_symbol_5;
+}
+
+tint_symbol_4 tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  main_out inner_result = tint_symbol_1_inner(tint_symbol_2.vMainuv_param, tint_symbol_2.v_output1_param, tint_symbol_2.gl_FrontFacing_param, tint_symbol_2.v_uv_param, tint_symbol_2.v_output2_param);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.glFragColor_1 = inner_result.glFragColor_1;
+  return wrapper_result;
+}
+in vec4 v_output1_param;
+in vec2 vMainuv_param;
+in vec4 v_output2_param;
+in vec2 v_uv_param;
+out vec4 glFragColor_1;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.v_output1_param = v_output1_param;
+  inputs.vMainuv_param = vMainuv_param;
+  inputs.v_output2_param = v_output2_param;
+  inputs.v_uv_param = v_uv_param;
+  inputs.gl_FrontFacing_param = gl_FrontFacing;
+  tint_symbol_4 outputs;
+  outputs = tint_symbol_1(inputs);
+  glFragColor_1 = outputs.glFragColor_1;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:53: 'ddx' : no matching overloaded function found 
+ERROR: 0:53: 'assign' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
+ERROR: 0:53: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/951.spvasm.expected.glsl b/test/bug/tint/951.spvasm.expected.glsl
new file mode 100644
index 0000000..e37316c
--- /dev/null
+++ b/test/bug/tint/951.spvasm.expected.glsl
@@ -0,0 +1,93 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer ssbOut_1 {
+  float result[];
+} x_16;
+layout (binding = 1) buffer ssbA_1 {
+  float A[];
+} x_20;
+uvec3 tint_symbol = uvec3(0u, 0u, 0u);
+layout (binding = 2) uniform Uniforms_1 {
+  float NAN;
+  int aShape;
+  int outShape;
+  int outShapeStrides;
+  int size;
+} x_24;
+
+float getAAtOutCoords_() {
+  uint x_42 = tint_symbol.x;
+  float x_44 = x_20.A[x_42];
+  return x_44;
+}
+
+float unaryOperation_f1_(inout float a) {
+  float x_47 = a;
+  if ((x_47 < 0.0f)) {
+    return asfloat(0x7f800000u);
+  }
+  float x_55 = a;
+  return log(x_55);
+}
+
+void setOutput_i1_f1_(inout int flatIndex, inout float value) {
+  int x_27 = flatIndex;
+  float x_28 = value;
+  x_16.result[x_27] = x_28;
+  return;
+}
+
+void main_1() {
+  int index = 0;
+  float a_1 = 0.0f;
+  float param = 0.0f;
+  int param_1 = 0;
+  float param_2 = 0.0f;
+  uint x_61 = tint_symbol.x;
+  index = int(x_61);
+  int x_63 = index;
+  int x_70 = x_24.size;
+  if ((x_63 < x_70)) {
+    float x_75 = getAAtOutCoords_();
+    a_1 = x_75;
+    param = a_1;
+    float x_78 = unaryOperation_f1_(param);
+    param_1 = index;
+    param_2 = x_78;
+    setOutput_i1_f1_(param_1, param_2);
+  }
+  return;
+}
+
+struct tint_symbol_3 {
+  uvec3 gl_GlobalInvocationID_param;
+};
+
+void tint_symbol_1_inner(uvec3 gl_GlobalInvocationID_param) {
+  tint_symbol = gl_GlobalInvocationID_param;
+  main_1();
+}
+
+layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  tint_symbol_1_inner(tint_symbol_2.gl_GlobalInvocationID_param);
+  return;
+}
+void main() {
+  tint_symbol_3 inputs;
+  inputs.gl_GlobalInvocationID_param = gl_GlobalInvocationID;
+  tint_symbol_1(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:29: 'asfloat' : no matching overloaded function found 
+ERROR: 0:29: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/959.wgsl.expected.glsl b/test/bug/tint/959.wgsl.expected.glsl
new file mode 100644
index 0000000..584c796
--- /dev/null
+++ b/test/bug/tint/959.wgsl.expected.glsl
@@ -0,0 +1,93 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  float a;
+} b0;
+layout (binding = 0) buffer S_2 {
+  float a;
+} b1;
+layout (binding = 0) buffer S_3 {
+  float a;
+} b2;
+layout (binding = 0) buffer S_4 {
+  float a;
+} b3;
+layout (binding = 0) buffer S_5 {
+  float a;
+} b4;
+layout (binding = 0) buffer S_6 {
+  float a;
+} b5;
+layout (binding = 0) buffer S_7 {
+  float a;
+} b6;
+layout (binding = 0) buffer S_8 {
+  float a;
+} b7;
+layout (binding = 1) uniform S_9 {
+  float a;
+} b8;
+layout (binding = 1) uniform S_10 {
+  float a;
+} b9;
+layout (binding = 1) uniform S_11 {
+  float a;
+} b10;
+layout (binding = 1) uniform S_12 {
+  float a;
+} b11;
+layout (binding = 1) uniform S_13 {
+  float a;
+} b12;
+layout (binding = 1) uniform S_14 {
+  float a;
+} b13;
+layout (binding = 1) uniform S_15 {
+  float a;
+} b14;
+layout (binding = 1) uniform S_16 {
+  float a;
+} b15;
+uniform highp sampler2D t0;
+uniform highp sampler2D t1;
+uniform highp sampler2D t2;
+uniform highp sampler2D t3;
+uniform highp sampler2D t4;
+uniform highp sampler2D t5;
+uniform highp sampler2D t6;
+uniform highp sampler2D t7;
+uniform highp sampler2D t8;
+uniform highp sampler2D t9;
+uniform highp sampler2D t10;
+uniform highp sampler2D t11;
+uniform highp sampler2D t12;
+uniform highp sampler2D t13;
+uniform highp sampler2D t14;
+uniform highp sampler2D t15;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/bug/tint/977.spvasm.expected.glsl b/test/bug/tint/977.spvasm.expected.glsl
new file mode 100644
index 0000000..b586780
--- /dev/null
+++ b/test/bug/tint/977.spvasm.expected.glsl
@@ -0,0 +1,75 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+uvec3 tint_symbol = uvec3(0u, 0u, 0u);
+layout (binding = 2) buffer ResultMatrix_1 {
+  float numbers[];
+} resultMatrix;
+
+float binaryOperation_f1_f1_(inout float a, inout float b) {
+  float x_26 = 0.0f;
+  float x_13 = b;
+  if ((x_13 == 0.0f)) {
+    return 1.0f;
+  }
+  float x_21 = b;
+  if (!((round((x_21 - (2.0f * floor((x_21 / 2.0f))))) == 1.0f))) {
+    float x_29 = a;
+    float x_31 = b;
+    x_26 = pow(abs(x_29), x_31);
+  } else {
+    float x_34 = a;
+    float x_36 = a;
+    float x_38 = b;
+    x_26 = (sign(x_34) * pow(abs(x_36), x_38));
+  }
+  return x_26;
+}
+
+void main_1() {
+  int index = 0;
+  int a_1 = 0;
+  float param = 0.0f;
+  float param_1 = 0.0f;
+  uint x_54 = tint_symbol.x;
+  index = int(x_54);
+  a_1 = -10;
+  int x_63 = index;
+  param = -4.0f;
+  param_1 = -3.0f;
+  float x_68 = binaryOperation_f1_f1_(param, param_1);
+  resultMatrix.numbers[x_63] = x_68;
+  return;
+}
+
+struct tint_symbol_3 {
+  uvec3 gl_GlobalInvocationID_param;
+};
+
+void tint_symbol_1_inner(uvec3 gl_GlobalInvocationID_param) {
+  tint_symbol = gl_GlobalInvocationID_param;
+  main_1();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol_1(tint_symbol_3 tint_symbol_2) {
+  tint_symbol_1_inner(tint_symbol_2.gl_GlobalInvocationID_param);
+  return;
+}
+void main() {
+  tint_symbol_3 inputs;
+  inputs.gl_GlobalInvocationID_param = gl_GlobalInvocationID;
+  tint_symbol_1(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:50: 'gl_GlobalInvocationID_param' : identifiers starting with "gl_" are reserved 
+ERROR: 0:50: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/978.wgsl.expected.glsl b/test/bug/tint/978.wgsl.expected.glsl
new file mode 100644
index 0000000..fad4bfc
--- /dev/null
+++ b/test/bug/tint/978.wgsl.expected.glsl
@@ -0,0 +1,46 @@
+#version 310 es
+precision mediump float;
+
+struct FragmentInput {
+  vec2 vUv;
+};
+struct FragmentOutput {
+  vec4 color;
+};
+
+uniform highp sampler2D depthMap;
+
+
+struct tint_symbol_3 {
+  vec2 vUv;
+};
+struct tint_symbol_4 {
+  vec4 color;
+};
+
+FragmentOutput tint_symbol_inner(FragmentInput fIn) {
+  float tint_symbol_1 = texture(depthMap, fIn.vUv).x;
+  vec3 color = vec3(tint_symbol_1, tint_symbol_1, tint_symbol_1);
+  FragmentOutput fOut = FragmentOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  fOut.color = vec4(color, 1.0f);
+  return fOut;
+}
+
+tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
+  FragmentInput tint_symbol_5 = FragmentInput(tint_symbol_2.vUv);
+  FragmentOutput inner_result = tint_symbol_inner(tint_symbol_5);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.color = inner_result.color;
+  return wrapper_result;
+}
+in vec2 vUv;
+out vec4 color;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.vUv = vUv;
+  tint_symbol_4 outputs;
+  outputs = tint_symbol(inputs);
+  color = outputs.color;
+}
+
+
diff --git a/test/bug/tint/980.wgsl.expected.glsl b/test/bug/tint/980.wgsl.expected.glsl
new file mode 100644
index 0000000..84a3101
--- /dev/null
+++ b/test/bug/tint/980.wgsl.expected.glsl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec3 Bad(uint index, vec3 rd) {
+  vec3 normal = vec3((0.0f).xxx);
+  normal[index] = -(sign(rd[index]));
+  return normalize(normal);
+}
+
+layout (binding = 0) buffer S_1 {
+  vec3 v;
+  uint i;
+} io;
+
+struct tint_symbol_2 {
+  uint idx;
+};
+
+void tint_symbol_inner(uint idx) {
+  io.v = Bad(io.i, io.v);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.idx);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.idx = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'scalar swizzle' : not supported with this profile: es
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/990.wgsl.expected.glsl b/test/bug/tint/990.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/bug/tint/990.wgsl.expected.glsl
diff --git a/test/bug/tint/992.wgsl.expected.glsl b/test/bug/tint/992.wgsl.expected.glsl
new file mode 100644
index 0000000..cf090d0
--- /dev/null
+++ b/test/bug/tint/992.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 frag_main_inner() {
+  float b = 0.0f;
+  vec3 v = vec3((b).xxx);
+  return vec4(v, 1.0f);
+}
+
+tint_symbol frag_main() {
+  vec4 inner_result = frag_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+out vec4 value;
+void main() {
+  tint_symbol outputs;
+  outputs = frag_main();
+  value = outputs.value;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:10: 'scalar swizzle' : not supported with this profile: es
+ERROR: 0:10: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/993.wgsl.expected.glsl b/test/bug/tint/993.wgsl.expected.glsl
new file mode 100644
index 0000000..685ccde
--- /dev/null
+++ b/test/bug/tint/993.wgsl.expected.glsl
@@ -0,0 +1,41 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Constants_1 {
+  uint zero;
+} constants;
+
+layout (binding = 1) buffer Result_1 {
+  uint value;
+} result;
+
+layout (binding = 0) buffer TestData_1 {
+  int data[3];
+} s;
+
+int runTest() {
+  int atomic_result = 0;
+  InterlockedOr(s.data[(0u + uint(constants.zero))], 0, atomic_result);
+  return atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  result.value = uint(runTest());
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:19: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:19: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/bug/tint/998.wgsl.expected.glsl b/test/bug/tint/998.wgsl.expected.glsl
new file mode 100644
index 0000000..7f04e45
--- /dev/null
+++ b/test/bug/tint/998.wgsl.expected.glsl
@@ -0,0 +1,24 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Constants_1 {
+  uint zero;
+} constants;
+
+struct S {
+  uint data[3];
+};
+
+S s = S(uint[3](0u, 0u, 0u));
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  s.data[constants.zero] = 0u;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..034c499
--- /dev/null
+++ b/test/expressions/binary/add/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat3 a = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  mat3 b = mat3(vec3(-1.0f, -2.0f, -3.0f), vec3(-4.0f, -5.0f, -6.0f), vec3(-7.0f, -8.0f, -9.0f));
+  mat3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..a11adca
--- /dev/null
+++ b/test/expressions/binary/add/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f + 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..4390508
--- /dev/null
+++ b/test/expressions/binary/add/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 + 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..5e1db81
--- /dev/null
+++ b/test/expressions/binary/add/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u + 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..0655ac2
--- /dev/null
+++ b/test/expressions/binary/add/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..ea0ed84
--- /dev/null
+++ b/test/expressions/binary/add/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..0fe0f75
--- /dev/null
+++ b/test/expressions/binary/add/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e7a2730
--- /dev/null
+++ b/test/expressions/binary/add/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a + 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..7882f3b
--- /dev/null
+++ b/test/expressions/binary/add/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a + 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..160e65c
--- /dev/null
+++ b/test/expressions/binary/add/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a + 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..7bd2c34
--- /dev/null
+++ b/test/expressions/binary/add/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..0b48495
--- /dev/null
+++ b/test/expressions/binary/add/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..bff24ce
--- /dev/null
+++ b/test/expressions/binary/add/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a + b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..ea9a02a
--- /dev/null
+++ b/test/expressions/binary/bit-and/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 & 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..f46f9cd
--- /dev/null
+++ b/test/expressions/binary/bit-and/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u & 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..d03945b
--- /dev/null
+++ b/test/expressions/binary/bit-and/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a & b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..1fc4c7f
--- /dev/null
+++ b/test/expressions/binary/bit-and/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a & b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..519f411
--- /dev/null
+++ b/test/expressions/binary/bit-or/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 | 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..52ae9c0
--- /dev/null
+++ b/test/expressions/binary/bit-or/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u | 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..a16e26d
--- /dev/null
+++ b/test/expressions/binary/bit-or/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a | b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..887fc52
--- /dev/null
+++ b/test/expressions/binary/bit-or/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a | b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..05cd2f1
--- /dev/null
+++ b/test/expressions/binary/bit-xor/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 ^ 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..284867d
--- /dev/null
+++ b/test/expressions/binary/bit-xor/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u ^ 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..8b212ba
--- /dev/null
+++ b/test/expressions/binary/bit-xor/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a ^ b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..59b5058
--- /dev/null
+++ b/test/expressions/binary/bit-xor/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a ^ b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..7db6fa7
--- /dev/null
+++ b/test/expressions/binary/div/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f / 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..f0efa17
--- /dev/null
+++ b/test/expressions/binary/div/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 / 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..d5d5366
--- /dev/null
+++ b/test/expressions/binary/div/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u / 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..6512ba3
--- /dev/null
+++ b/test/expressions/binary/div/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..08c20db
--- /dev/null
+++ b/test/expressions/binary/div/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..1ee9726
--- /dev/null
+++ b/test/expressions/binary/div/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..28eea80
--- /dev/null
+++ b/test/expressions/binary/div/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a / 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..126af32
--- /dev/null
+++ b/test/expressions/binary/div/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a / 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..6442c2c
--- /dev/null
+++ b/test/expressions/binary/div/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a / 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..4c1e415
--- /dev/null
+++ b/test/expressions/binary/div/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..18991b5
--- /dev/null
+++ b/test/expressions/binary/div/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..8b8ddcb
--- /dev/null
+++ b/test/expressions/binary/div/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a / b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..11e2270
--- /dev/null
+++ b/test/expressions/binary/left-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 << 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..8c7242c
--- /dev/null
+++ b/test/expressions/binary/left-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u << 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..71fa7c5
--- /dev/null
+++ b/test/expressions/binary/left-shift/vector-vector/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  ivec3 r = (a << b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e7cf54f
--- /dev/null
+++ b/test/expressions/binary/left-shift/vector-vector/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a << b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e0fd1be
--- /dev/null
+++ b/test/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,22 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f % 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' const float' and a right operand of type ' const float' (or there is no acceptable conversion)
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..5c42789
--- /dev/null
+++ b/test/expressions/binary/mod/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 % 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..0015a14
--- /dev/null
+++ b/test/expressions/binary/mod/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u % 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..602ca02
--- /dev/null
+++ b/test/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,24 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a % b);
+  return;
+}
+void main() {
+  f();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: '%' :  wrong operand types: no operation '%' exists that takes a left-hand operand of type ' temp mediump 3-component vector of float' and a right operand of type ' temp mediump 3-component vector of float' (or there is no acceptable conversion)
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..7fa186b
--- /dev/null
+++ b/test/expressions/binary/mod/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a % b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..101e545
--- /dev/null
+++ b/test/expressions/binary/mod/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a % b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..36ae96a
--- /dev/null
+++ b/test/expressions/binary/mul/mat2x4-mat4x2/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat2x4 a = mat2x4(vec4(1.0f, 2.0f, 3.0f, 4.0f), vec4(5.0f, 6.0f, 7.0f, 8.0f));
+  mat4x2 b = mat4x2(vec2(-1.0f, -2.0f), vec2(-3.0f, -4.0f), vec2(-5.0f, -6.0f), vec2(-7.0f, -8.0f));
+  mat4 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..79f4870
--- /dev/null
+++ b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat3x2 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec2 x = (data.matrix * data.vector);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..924136f
--- /dev/null
+++ b/test/expressions/binary/mul/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat3 a = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  mat3 b = mat3(vec3(-1.0f, -2.0f, -3.0f), vec3(-4.0f, -5.0f, -6.0f), vec3(-7.0f, -8.0f, -9.0f));
+  mat3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..ba963d9
--- /dev/null
+++ b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat3 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec3 x = (data.matrix * data.vector);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..2596862
--- /dev/null
+++ b/test/expressions/binary/mul/mat4x2-mat2x4/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat4x2 a = mat4x2(vec2(-1.0f, -2.0f), vec2(-3.0f, -4.0f), vec2(-5.0f, -6.0f), vec2(-7.0f, -8.0f));
+  mat2x4 b = mat2x4(vec4(1.0f, 2.0f, 3.0f, 4.0f), vec4(5.0f, 6.0f, 7.0f, 8.0f));
+  mat2 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..1629327
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f * 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..917ae68
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 * 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..22b2997
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u * 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..9c4bb5b
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..b3e5917
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..2d2fbf7
--- /dev/null
+++ b/test/expressions/binary/mul/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..6103644
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat3 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec3 x = (data.vector * data.matrix);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..2b7ad6d
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  mat4x3 matrix;
+  vec3 vector;
+} data;
+
+void tint_symbol() {
+  vec4 x = (data.vector * data.matrix);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..68aadcc
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a * 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..7e33049
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a * 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..9c19c28
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a * 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..fdfb8b4
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..bd7f2b7
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..20ed770
--- /dev/null
+++ b/test/expressions/binary/mul/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a * b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..040542f
--- /dev/null
+++ b/test/expressions/binary/right-shift/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 >> 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..7eeeb71
--- /dev/null
+++ b/test/expressions/binary/right-shift/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u >> 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..eb2f2ed
--- /dev/null
+++ b/test/expressions/binary/right-shift/vector-vector/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  ivec3 r = (a >> b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e62bc29
--- /dev/null
+++ b/test/expressions/binary/right-shift/vector-vector/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a >> b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..358b664
--- /dev/null
+++ b/test/expressions/binary/sub/mat3x3-mat3x3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat3 a = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  mat3 b = mat3(vec3(-1.0f, -2.0f, -3.0f), vec3(-4.0f, -5.0f, -6.0f), vec3(-7.0f, -8.0f, -9.0f));
+  mat3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..116ab47
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float r = (1.0f - 2.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..01bf2df
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int r = (1 - 2);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..682d1bf
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint r = (1u - 2u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..67f29c6
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float a = 4.0f;
+  vec3 b = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..66d19e2
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int a = 4;
+  ivec3 b = ivec3(1, 2, 3);
+  ivec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e23b5c6
--- /dev/null
+++ b/test/expressions/binary/sub/scalar-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint a = 4u;
+  uvec3 b = uvec3(1u, 2u, 3u);
+  uvec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..b2a2318
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-scalar/f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 r = (a - 4.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..225c732
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-scalar/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 r = (a - 4);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..23e6c8a
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-scalar/u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 r = (a - 4u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..88ca974
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-vec3/f32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = vec3(4.0f, 5.0f, 6.0f);
+  vec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..13aca0a8
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-vec3/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = ivec3(4, 5, 6);
+  ivec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..5495326
--- /dev/null
+++ b/test/expressions/binary/sub/vec3-vec3/u32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = uvec3(4u, 5u, 6u);
+  uvec3 r = (a - b);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
new file mode 100644
index 0000000..5d6e5d0
--- /dev/null
+++ b/test/expressions/bitcast/scalar/f32-f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float b = 1.0f;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
new file mode 100644
index 0000000..33b530b
--- /dev/null
+++ b/test/expressions/bitcast/scalar/f32-i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int b = floatBitsToInt(1.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..f2f8061
--- /dev/null
+++ b/test/expressions/bitcast/scalar/f32-u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint b = floatBitsToUint(1.0f);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
new file mode 100644
index 0000000..7f8a6e5
--- /dev/null
+++ b/test/expressions/bitcast/scalar/i32-f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float b = intBitsToFloat(1);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
new file mode 100644
index 0000000..6675356
--- /dev/null
+++ b/test/expressions/bitcast/scalar/i32-i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int b = 1;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..5adfadd
--- /dev/null
+++ b/test/expressions/bitcast/scalar/i32-u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint b = uint(1);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..faefd2d
--- /dev/null
+++ b/test/expressions/bitcast/scalar/i32min-u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint b = uint(-2147483648);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
new file mode 100644
index 0000000..dd904cd
--- /dev/null
+++ b/test/expressions/bitcast/scalar/u32-f32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  float b = uintBitsToFloat(1u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
new file mode 100644
index 0000000..6ca4979
--- /dev/null
+++ b/test/expressions/bitcast/scalar/u32-i32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int b = int(1u);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl b/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..fb6eff6
--- /dev/null
+++ b/test/expressions/bitcast/scalar/u32-u32.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uint b = 1u;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl b/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl
new file mode 100644
index 0000000..6ace57f
--- /dev/null
+++ b/test/expressions/bitcast/vector/f32-f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  vec3 b = a;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl b/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl
new file mode 100644
index 0000000..3ada590
--- /dev/null
+++ b/test/expressions/bitcast/vector/f32-i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  ivec3 b = floatBitsToInt(a);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl b/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..69e07dc
--- /dev/null
+++ b/test/expressions/bitcast/vector/f32-u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  vec3 a = vec3(1.0f, 2.0f, 3.0f);
+  uvec3 b = floatBitsToUint(a);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl b/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl
new file mode 100644
index 0000000..9efb6f6
--- /dev/null
+++ b/test/expressions/bitcast/vector/i32-f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  vec3 b = intBitsToFloat(a);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl b/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl
new file mode 100644
index 0000000..f951aae
--- /dev/null
+++ b/test/expressions/bitcast/vector/i32-i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  ivec3 b = a;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl b/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..ecc1fd4
--- /dev/null
+++ b/test/expressions/bitcast/vector/i32-u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  ivec3 a = ivec3(1, 2, 3);
+  uvec3 b = uvec3(a);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl b/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl
new file mode 100644
index 0000000..77ee422
--- /dev/null
+++ b/test/expressions/bitcast/vector/u32-f32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  vec3 b = uintBitsToFloat(a);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl b/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl
new file mode 100644
index 0000000..0e98c52
--- /dev/null
+++ b/test/expressions/bitcast/vector/u32-i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  ivec3 b = ivec3(a);
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl b/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl
new file mode 100644
index 0000000..615f2f0
--- /dev/null
+++ b/test/expressions/bitcast/vector/u32-u32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  uvec3 a = uvec3(1u, 2u, 3u);
+  uvec3 b = a;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/expressions/literals/-inf.spvasm.expected.glsl b/test/expressions/literals/-inf.spvasm.expected.glsl
new file mode 100644
index 0000000..6bad4d5
--- /dev/null
+++ b/test/expressions/literals/-inf.spvasm.expected.glsl
@@ -0,0 +1,46 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void main_1() {
+  out_var_SV_TARGET = vec4(asfloat(0xff800000u), asfloat(0xff800000u), asfloat(0xff800000u), asfloat(0xff800000u));
+  return;
+}
+
+struct main_out {
+  vec4 out_var_SV_TARGET_1;
+};
+struct tint_symbol_1 {
+  vec4 out_var_SV_TARGET_1;
+};
+
+main_out tint_symbol_inner() {
+  main_1();
+  main_out tint_symbol_2 = main_out(out_var_SV_TARGET);
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  main_out inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
+  return wrapper_result;
+}
+out vec4 out_var_SV_TARGET_1;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  out_var_SV_TARGET_1 = outputs.out_var_SV_TARGET_1;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'asfloat' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/literals/inf.spvasm.expected.glsl b/test/expressions/literals/inf.spvasm.expected.glsl
new file mode 100644
index 0000000..46738b0
--- /dev/null
+++ b/test/expressions/literals/inf.spvasm.expected.glsl
@@ -0,0 +1,46 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void main_1() {
+  out_var_SV_TARGET = vec4(asfloat(0x7f800000u), asfloat(0x7f800000u), asfloat(0x7f800000u), asfloat(0x7f800000u));
+  return;
+}
+
+struct main_out {
+  vec4 out_var_SV_TARGET_1;
+};
+struct tint_symbol_1 {
+  vec4 out_var_SV_TARGET_1;
+};
+
+main_out tint_symbol_inner() {
+  main_1();
+  main_out tint_symbol_2 = main_out(out_var_SV_TARGET);
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  main_out inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
+  return wrapper_result;
+}
+out vec4 out_var_SV_TARGET_1;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  out_var_SV_TARGET_1 = outputs.out_var_SV_TARGET_1;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'asfloat' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/literals/intmin.wgsl.expected.glsl b/test/expressions/literals/intmin.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/literals/intmin.wgsl.expected.glsl
diff --git a/test/expressions/literals/nan.spvasm.expected.glsl b/test/expressions/literals/nan.spvasm.expected.glsl
new file mode 100644
index 0000000..eff4ad4
--- /dev/null
+++ b/test/expressions/literals/nan.spvasm.expected.glsl
@@ -0,0 +1,46 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec4 out_var_SV_TARGET = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void main_1() {
+  out_var_SV_TARGET = vec4(asfloat(0x7fc00000u), asfloat(0x7fc00000u), asfloat(0x7fc00000u), asfloat(0x7fc00000u));
+  return;
+}
+
+struct main_out {
+  vec4 out_var_SV_TARGET_1;
+};
+struct tint_symbol_1 {
+  vec4 out_var_SV_TARGET_1;
+};
+
+main_out tint_symbol_inner() {
+  main_1();
+  main_out tint_symbol_2 = main_out(out_var_SV_TARGET);
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  main_out inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.out_var_SV_TARGET_1 = inner_result.out_var_SV_TARGET_1;
+  return wrapper_result;
+}
+out vec4 out_var_SV_TARGET_1;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  out_var_SV_TARGET_1 = outputs.out_var_SV_TARGET_1;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'asfloat' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/expressions/splat/call/bool.wgsl.expected.glsl b/test/expressions/splat/call/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/call/bool.wgsl.expected.glsl
diff --git a/test/expressions/splat/call/f32.wgsl.expected.glsl b/test/expressions/splat/call/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/call/f32.wgsl.expected.glsl
diff --git a/test/expressions/splat/call/i32.wgsl.expected.glsl b/test/expressions/splat/call/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/call/i32.wgsl.expected.glsl
diff --git a/test/expressions/splat/call/u32.wgsl.expected.glsl b/test/expressions/splat/call/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/call/u32.wgsl.expected.glsl
diff --git a/test/expressions/splat/expression/bool.wgsl.expected.glsl b/test/expressions/splat/expression/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/expression/bool.wgsl.expected.glsl
diff --git a/test/expressions/splat/expression/f32.wgsl.expected.glsl b/test/expressions/splat/expression/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/expression/f32.wgsl.expected.glsl
diff --git a/test/expressions/splat/expression/i32.wgsl.expected.glsl b/test/expressions/splat/expression/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/expression/i32.wgsl.expected.glsl
diff --git a/test/expressions/splat/expression/u32.wgsl.expected.glsl b/test/expressions/splat/expression/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/expression/u32.wgsl.expected.glsl
diff --git a/test/expressions/splat/immediate/bool.wgsl.expected.glsl b/test/expressions/splat/immediate/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/immediate/bool.wgsl.expected.glsl
diff --git a/test/expressions/splat/immediate/f32.wgsl.expected.glsl b/test/expressions/splat/immediate/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/immediate/f32.wgsl.expected.glsl
diff --git a/test/expressions/splat/immediate/i32.wgsl.expected.glsl b/test/expressions/splat/immediate/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/immediate/i32.wgsl.expected.glsl
diff --git a/test/expressions/splat/immediate/u32.wgsl.expected.glsl b/test/expressions/splat/immediate/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/immediate/u32.wgsl.expected.glsl
diff --git a/test/expressions/splat/var/bool.wgsl.expected.glsl b/test/expressions/splat/var/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/var/bool.wgsl.expected.glsl
diff --git a/test/expressions/splat/var/f32.wgsl.expected.glsl b/test/expressions/splat/var/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/var/f32.wgsl.expected.glsl
diff --git a/test/expressions/splat/var/i32.wgsl.expected.glsl b/test/expressions/splat/var/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/var/i32.wgsl.expected.glsl
diff --git a/test/expressions/splat/var/u32.wgsl.expected.glsl b/test/expressions/splat/var/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/var/u32.wgsl.expected.glsl
diff --git a/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl b/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/splat/with_swizzle/f32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.glsl
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.glsl
diff --git a/test/expressions/unary/complement/complement.wgsl.expected.glsl b/test/expressions/unary/complement/complement.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/unary/complement/complement.wgsl.expected.glsl
diff --git a/test/expressions/unary/negate/negate.wgsl.expected.glsl b/test/expressions/unary/negate/negate.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/unary/negate/negate.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/array/bool.wgsl.expected.glsl b/test/expressions/zero_init/array/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/array/bool.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/array/f32.wgsl.expected.glsl b/test/expressions/zero_init/array/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/array/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/array/i32.wgsl.expected.glsl b/test/expressions/zero_init/array/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/array/i32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/array/struct.wgsl.expected.glsl b/test/expressions/zero_init/array/struct.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/array/struct.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/array/u32.wgsl.expected.glsl b/test/expressions/zero_init/array/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/array/u32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat2x2/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat2x3/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat2x4/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat3x2/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat3x3/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat3x4/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat4x2/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat4x3/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl b/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/mat4x4/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl b/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/scalar/bool.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl b/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/scalar/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl b/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/scalar/i32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl b/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/scalar/u32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/struct/array.wgsl.expected.glsl b/test/expressions/zero_init/struct/array.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/struct/array.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl b/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/struct/scalar.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl b/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec2/bool.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl b/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec2/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl b/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec2/i32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl b/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec2/u32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl b/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec3/bool.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl b/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec3/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl b/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec3/i32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl b/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec3/u32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl b/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec4/bool.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl b/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec4/f32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl b/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec4/i32.wgsl.expected.glsl
diff --git a/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl b/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expressions/zero_init/vec4/u32.wgsl.expected.glsl
diff --git a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl
new file mode 100644
index 0000000..f910844
--- /dev/null
+++ b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a[];
+} G;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uint tint_symbol_2 = 0u;
+  G.GetDimensions(tint_symbol_2);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint l1 = tint_symbol_3;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'GetDimensions' : no such field in structure 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl b/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl
new file mode 100644
index 0000000..b4a6064
--- /dev/null
+++ b/test/intrinsics/arrayLength/deprecated.wgsl.expected.glsl
@@ -0,0 +1,31 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a[];
+} G;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uint tint_symbol_2 = 0u;
+  G.GetDimensions(tint_symbol_2);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint l1 = tint_symbol_3;
+  uint l2 = tint_symbol_3;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'GetDimensions' : no such field in structure 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/arrayLength/simple.wgsl.expected.glsl b/test/intrinsics/arrayLength/simple.wgsl.expected.glsl
new file mode 100644
index 0000000..f910844
--- /dev/null
+++ b/test/intrinsics/arrayLength/simple.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a[];
+} G;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uint tint_symbol_2 = 0u;
+  G.GetDimensions(tint_symbol_2);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint l1 = tint_symbol_3;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'GetDimensions' : no such field in structure 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl
new file mode 100644
index 0000000..f910844
--- /dev/null
+++ b/test/intrinsics/arrayLength/via_let.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a[];
+} G;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uint tint_symbol_2 = 0u;
+  G.GetDimensions(tint_symbol_2);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint l1 = tint_symbol_3;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'GetDimensions' : no such field in structure 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl
new file mode 100644
index 0000000..f910844
--- /dev/null
+++ b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a[];
+} G;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  uint tint_symbol_2 = 0u;
+  G.GetDimensions(tint_symbol_2);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint l1 = tint_symbol_3;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'GetDimensions' : no such field in structure 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/degrees.spvasm.expected.glsl b/test/intrinsics/degrees.spvasm.expected.glsl
new file mode 100644
index 0000000..29619c6
--- /dev/null
+++ b/test/intrinsics/degrees.spvasm.expected.glsl
@@ -0,0 +1,21 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  float a = 0.0f;
+  float b = 0.0f;
+  a = 42.0f;
+  b = (a * 57.295780182f);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/intrinsics/frexp.wgsl.expected.glsl b/test/intrinsics/frexp.wgsl.expected.glsl
new file mode 100644
index 0000000..a0d5cde
--- /dev/null
+++ b/test/intrinsics/frexp.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result {
+  float sig;
+  int exp;
+};
+frexp_result tint_frexp(float param_0) {
+  float exp;
+  float sig = frexp(param_0, exp);
+  frexp_result result = {sig, int(exp)};
+  return result;
+}
+
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  frexp_result res = tint_frexp(1.230000019f);
+  int tint_symbol_1 = res.exp;
+  float sig = res.sig;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:10: 'frexp' : no matching overloaded function found 
+ERROR: 0:10: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/abs/002533.wgsl.expected.glsl b/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
new file mode 100644
index 0000000..37efd67
--- /dev/null
+++ b/test/intrinsics/gen/abs/002533.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_002533() {
+  vec4 res = abs(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_002533();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_002533() {
+  vec4 res = abs(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_002533();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_002533() {
+  vec4 res = abs(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e538ffc
--- /dev/null
+++ b/test/intrinsics/gen/abs/005174.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_005174() {
+  vec3 res = abs(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_005174();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_005174() {
+  vec3 res = abs(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_005174();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_005174() {
+  vec3 res = abs(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f5203d9
--- /dev/null
+++ b/test/intrinsics/gen/abs/1ce782.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void abs_1ce782() {
+  uvec4 res = abs(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_1ce782();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_1ce782() {
+  uvec4 res = abs(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_1ce782() {
+  uvec4 res = abs(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
new file mode 100644
index 0000000..3260ba1
--- /dev/null
+++ b/test/intrinsics/gen/abs/1e9d53.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_1e9d53() {
+  vec2 res = abs(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_1e9d53();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_1e9d53() {
+  vec2 res = abs(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_1e9d53();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_1e9d53() {
+  vec2 res = abs(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f94f2f5
--- /dev/null
+++ b/test/intrinsics/gen/abs/467cd1.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void abs_467cd1() {
+  uint res = abs(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_467cd1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_467cd1() {
+  uint res = abs(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_467cd1() {
+  uint res = abs(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl b/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
new file mode 100644
index 0000000..f7dbd20
--- /dev/null
+++ b/test/intrinsics/gen/abs/4ad288.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_4ad288() {
+  int res = abs(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_4ad288();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_4ad288() {
+  int res = abs(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_4ad288();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_4ad288() {
+  int res = abs(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..61111dd
--- /dev/null
+++ b/test/intrinsics/gen/abs/5ad50a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_5ad50a() {
+  ivec3 res = abs(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_5ad50a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_5ad50a() {
+  ivec3 res = abs(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_5ad50a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_5ad50a() {
+  ivec3 res = abs(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..54c757a
--- /dev/null
+++ b/test/intrinsics/gen/abs/7326de.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void abs_7326de() {
+  uvec3 res = abs(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_7326de();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_7326de() {
+  uvec3 res = abs(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_7326de() {
+  uvec3 res = abs(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
new file mode 100644
index 0000000..d3ce049
--- /dev/null
+++ b/test/intrinsics/gen/abs/7f28e6.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void abs_7f28e6() {
+  uvec2 res = abs(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_7f28e6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_7f28e6() {
+  uvec2 res = abs(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void abs_7f28e6() {
+  uvec2 res = abs(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
new file mode 100644
index 0000000..0bc8ce5
--- /dev/null
+++ b/test/intrinsics/gen/abs/7faa9e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_7faa9e() {
+  ivec2 res = abs(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_7faa9e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_7faa9e() {
+  ivec2 res = abs(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_7faa9e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_7faa9e() {
+  ivec2 res = abs(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9c4029c
--- /dev/null
+++ b/test/intrinsics/gen/abs/9c80a6.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_9c80a6() {
+  ivec4 res = abs(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_9c80a6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_9c80a6() {
+  ivec4 res = abs(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_9c80a6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_9c80a6() {
+  ivec4 res = abs(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..bc63419
--- /dev/null
+++ b/test/intrinsics/gen/abs/b96037.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void abs_b96037() {
+  float res = abs(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  abs_b96037();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_b96037() {
+  float res = abs(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  abs_b96037();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void abs_b96037() {
+  float res = abs(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4671881
--- /dev/null
+++ b/test/intrinsics/gen/acos/489247.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void acos_489247() {
+  float res = acos(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  acos_489247();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_489247() {
+  float res = acos(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  acos_489247();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_489247() {
+  float res = acos(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..97e9be5
--- /dev/null
+++ b/test/intrinsics/gen/acos/8e2acf.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void acos_8e2acf() {
+  vec4 res = acos(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  acos_8e2acf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_8e2acf() {
+  vec4 res = acos(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  acos_8e2acf();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_8e2acf() {
+  vec4 res = acos(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..22d013a
--- /dev/null
+++ b/test/intrinsics/gen/acos/a610c4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void acos_a610c4() {
+  vec3 res = acos(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  acos_a610c4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_a610c4() {
+  vec3 res = acos(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  acos_a610c4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_a610c4() {
+  vec3 res = acos(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2969cd7
--- /dev/null
+++ b/test/intrinsics/gen/acos/dfc915.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void acos_dfc915() {
+  vec2 res = acos(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  acos_dfc915();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_dfc915() {
+  vec2 res = acos(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  acos_dfc915();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void acos_dfc915() {
+  vec2 res = acos(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..256c243
--- /dev/null
+++ b/test/intrinsics/gen/all/353d6a.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void all_353d6a() {
+  bool res = all(false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  all_353d6a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void all_353d6a() {
+  bool res = all(false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void all_353d6a() {
+  bool res = all(false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl b/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
new file mode 100644
index 0000000..4274d15
--- /dev/null
+++ b/test/intrinsics/gen/all/986c7b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void all_986c7b() {
+  bool res = all(bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  all_986c7b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void all_986c7b() {
+  bool res = all(bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  all_986c7b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void all_986c7b() {
+  bool res = all(bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..8cd6c93
--- /dev/null
+++ b/test/intrinsics/gen/all/bd2dba.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void all_bd2dba() {
+  bool res = all(bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  all_bd2dba();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void all_bd2dba() {
+  bool res = all(bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  all_bd2dba();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void all_bd2dba() {
+  bool res = all(bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4ad941d
--- /dev/null
+++ b/test/intrinsics/gen/all/f46790.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void all_f46790() {
+  bool res = all(bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  all_f46790();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void all_f46790() {
+  bool res = all(bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  all_f46790();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void all_f46790() {
+  bool res = all(bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1bc4e96
--- /dev/null
+++ b/test/intrinsics/gen/any/083428.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void any_083428() {
+  bool res = any(bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  any_083428();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void any_083428() {
+  bool res = any(bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  any_083428();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void any_083428() {
+  bool res = any(bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3ad92f7
--- /dev/null
+++ b/test/intrinsics/gen/any/0e3e58.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void any_0e3e58() {
+  bool res = any(bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  any_0e3e58();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void any_0e3e58() {
+  bool res = any(bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  any_0e3e58();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void any_0e3e58() {
+  bool res = any(bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..31564bc
--- /dev/null
+++ b/test/intrinsics/gen/any/2ab91a.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void any_2ab91a() {
+  bool res = any(false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  any_2ab91a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void any_2ab91a() {
+  bool res = any(false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void any_2ab91a() {
+  bool res = any(false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl b/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
new file mode 100644
index 0000000..a90aa60
--- /dev/null
+++ b/test/intrinsics/gen/any/e755c1.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void any_e755c1() {
+  bool res = any(bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  any_e755c1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void any_e755c1() {
+  bool res = any(bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  any_e755c1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void any_e755c1() {
+  bool res = any(bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6e00a68
--- /dev/null
+++ b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  arrayLength_1588cd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..35a6d6e
--- /dev/null
+++ b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  arrayLength_61b1c7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..c398958
--- /dev/null
+++ b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  arrayLength_a0f5ca();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..fc6d390
--- /dev/null
+++ b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  arrayLength_cdd123();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..6a17122
--- /dev/null
+++ b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  arrayLength_cfca0a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..b84191f
--- /dev/null
+++ b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  arrayLength_eb510f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#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);
+  uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u);
+  uint res = tint_symbol_3;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..cdc9a95
--- /dev/null
+++ b/test/intrinsics/gen/asin/064953.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void asin_064953() {
+  vec4 res = asin(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  asin_064953();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_064953() {
+  vec4 res = asin(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  asin_064953();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_064953() {
+  vec4 res = asin(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4af4bed
--- /dev/null
+++ b/test/intrinsics/gen/asin/7b6a44.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void asin_7b6a44() {
+  vec2 res = asin(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  asin_7b6a44();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_7b6a44() {
+  vec2 res = asin(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  asin_7b6a44();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_7b6a44() {
+  vec2 res = asin(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..48fdbcb
--- /dev/null
+++ b/test/intrinsics/gen/asin/8cd9c9.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void asin_8cd9c9() {
+  vec3 res = asin(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  asin_8cd9c9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_8cd9c9() {
+  vec3 res = asin(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  asin_8cd9c9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_8cd9c9() {
+  vec3 res = asin(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1e8378e
--- /dev/null
+++ b/test/intrinsics/gen/asin/c0c272.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void asin_c0c272() {
+  float res = asin(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  asin_c0c272();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_c0c272() {
+  float res = asin(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  asin_c0c272();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void asin_c0c272() {
+  float res = asin(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ee1eaad
--- /dev/null
+++ b/test/intrinsics/gen/atan/02979a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan_02979a() {
+  float res = atan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan_02979a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_02979a() {
+  float res = atan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan_02979a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_02979a() {
+  float res = atan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..84b1dfd
--- /dev/null
+++ b/test/intrinsics/gen/atan/331e6d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan_331e6d() {
+  vec3 res = atan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan_331e6d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_331e6d() {
+  vec3 res = atan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan_331e6d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_331e6d() {
+  vec3 res = atan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0ebc406
--- /dev/null
+++ b/test/intrinsics/gen/atan/a8b696.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan_a8b696() {
+  vec4 res = atan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan_a8b696();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_a8b696() {
+  vec4 res = atan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan_a8b696();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_a8b696() {
+  vec4 res = atan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..c07ed31
--- /dev/null
+++ b/test/intrinsics/gen/atan/ad96e4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan_ad96e4() {
+  vec2 res = atan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan_ad96e4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_ad96e4() {
+  vec2 res = atan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan_ad96e4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan_ad96e4() {
+  vec2 res = atan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9e5d0a3
--- /dev/null
+++ b/test/intrinsics/gen/atan2/57fb13.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan2_57fb13() {
+  vec2 res = atan(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan2_57fb13();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_57fb13() {
+  vec2 res = atan(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan2_57fb13();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_57fb13() {
+  vec2 res = atan(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..b5eec8b
--- /dev/null
+++ b/test/intrinsics/gen/atan2/96057c.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan2_96057c() {
+  float res = atan(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan2_96057c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_96057c() {
+  float res = atan(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan2_96057c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_96057c() {
+  float res = atan(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f06fcdd
--- /dev/null
+++ b/test/intrinsics/gen/atan2/a70d0d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan2_a70d0d() {
+  vec3 res = atan(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan2_a70d0d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_a70d0d() {
+  vec3 res = atan(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan2_a70d0d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_a70d0d() {
+  vec3 res = atan(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ec9f7d0
--- /dev/null
+++ b/test/intrinsics/gen/atan2/ae713e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void atan2_ae713e() {
+  vec4 res = atan(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  atan2_ae713e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_ae713e() {
+  vec4 res = atan(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  atan2_ae713e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void atan2_ae713e() {
+  vec4 res = atan(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..cc143ec
--- /dev/null
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicAdd_794055() {
+  int atomic_result = 0;
+  InterlockedAdd(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicAdd_794055();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
new file mode 100644
index 0000000..139df57
--- /dev/null
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicAdd_8a199a() {
+  uint atomic_result = 0u;
+  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicAdd_8a199a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicAdd_8a199a() {
+  uint atomic_result = 0u;
+  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicAdd_8a199a();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
new file mode 100644
index 0000000..e157ee3
--- /dev/null
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicAdd_d32fe4() {
+  int atomic_result = 0;
+  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicAdd_d32fe4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicAdd_d32fe4() {
+  int atomic_result = 0;
+  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicAdd_d32fe4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
new file mode 100644
index 0000000..1c43164
--- /dev/null
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicAdd_d5db1d() {
+  uint atomic_result = 0u;
+  InterlockedAdd(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicAdd_d5db1d();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
new file mode 100644
index 0000000..813e521
--- /dev/null
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicAnd_152966() {
+  int atomic_result = 0;
+  InterlockedAnd(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicAnd_152966();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicAnd_152966() {
+  int atomic_result = 0;
+  InterlockedAnd(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicAnd_152966();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
new file mode 100644
index 0000000..05f66bb
--- /dev/null
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicAnd_34edd3() {
+  uint atomic_result = 0u;
+  InterlockedAnd(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicAnd_34edd3();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
new file mode 100644
index 0000000..10635fb
--- /dev/null
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicAnd_45a819() {
+  int atomic_result = 0;
+  InterlockedAnd(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicAnd_45a819();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
new file mode 100644
index 0000000..50f0b04
--- /dev/null
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicAnd_85a8d9() {
+  uint atomic_result = 0u;
+  InterlockedAnd(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicAnd_85a8d9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicAnd_85a8d9() {
+  uint atomic_result = 0u;
+  InterlockedAnd(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicAnd_85a8d9();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
new file mode 100644
index 0000000..f15fa37
--- /dev/null
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
@@ -0,0 +1,67 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicCompareExchangeWeak_12871c() {
+  ivec2 atomic_result = ivec2(0, 0);
+  int atomic_compare_value = 1;
+  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1, atomic_result.x);
+  atomic_result.y = atomic_result.x == atomic_compare_value;
+  ivec2 res = atomic_result;
+}
+
+void fragment_main() {
+  atomicCompareExchangeWeak_12871c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicCompareExchangeWeak_12871c() {
+  ivec2 atomic_result = ivec2(0, 0);
+  int atomic_compare_value = 1;
+  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1, atomic_result.x);
+  atomic_result.y = atomic_result.x == atomic_compare_value;
+  ivec2 res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicCompareExchangeWeak_12871c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
new file mode 100644
index 0000000..f1cde24
--- /dev/null
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
@@ -0,0 +1,67 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicCompareExchangeWeak_6673da() {
+  uvec2 atomic_result = uvec2(0u, 0u);
+  uint atomic_compare_value = 1u;
+  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1u, atomic_result.x);
+  atomic_result.y = atomic_result.x == atomic_compare_value;
+  uvec2 res = atomic_result;
+}
+
+void fragment_main() {
+  atomicCompareExchangeWeak_6673da();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicCompareExchangeWeak_6673da() {
+  uvec2 atomic_result = uvec2(0u, 0u);
+  uint atomic_compare_value = 1u;
+  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1u, atomic_result.x);
+  atomic_result.y = atomic_result.x == atomic_compare_value;
+  uvec2 res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicCompareExchangeWeak_6673da();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
+ERROR: 0:12: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
new file mode 100644
index 0000000..9760452
--- /dev/null
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
@@ -0,0 +1,46 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicCompareExchangeWeak_89ea3b() {
+  ivec2 atomic_result = ivec2(0, 0);
+  int atomic_compare_value = 1;
+  InterlockedCompareExchange(arg_0, atomic_compare_value, 1, atomic_result.x);
+  atomic_result.y = atomic_result.x == atomic_compare_value;
+  ivec2 res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicCompareExchangeWeak_89ea3b();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
new file mode 100644
index 0000000..be102ee
--- /dev/null
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
@@ -0,0 +1,46 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicCompareExchangeWeak_b2ab2c() {
+  uvec2 atomic_result = uvec2(0u, 0u);
+  uint atomic_compare_value = 1u;
+  InterlockedCompareExchange(arg_0, atomic_compare_value, 1u, atomic_result.x);
+  atomic_result.y = atomic_result.x == atomic_compare_value;
+  uvec2 res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicCompareExchangeWeak_b2ab2c();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
new file mode 100644
index 0000000..8b09423
--- /dev/null
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicExchange_0a5dca() {
+  uint atomic_result = 0u;
+  InterlockedExchange(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicExchange_0a5dca();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
new file mode 100644
index 0000000..7e1913c
--- /dev/null
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicExchange_d59712() {
+  uint atomic_result = 0u;
+  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicExchange_d59712();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicExchange_d59712() {
+  uint atomic_result = 0u;
+  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicExchange_d59712();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
new file mode 100644
index 0000000..d847eaf
--- /dev/null
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicExchange_e114ba() {
+  int atomic_result = 0;
+  InterlockedExchange(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicExchange_e114ba();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
new file mode 100644
index 0000000..f777a17
--- /dev/null
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicExchange_f2e22f() {
+  int atomic_result = 0;
+  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicExchange_f2e22f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicExchange_f2e22f() {
+  int atomic_result = 0;
+  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicExchange_f2e22f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
new file mode 100644
index 0000000..2f8cb3d
--- /dev/null
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicLoad_0806ad() {
+  int atomic_result = 0;
+  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicLoad_0806ad();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicLoad_0806ad() {
+  int atomic_result = 0;
+  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicLoad_0806ad();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
new file mode 100644
index 0000000..e0c94f0
--- /dev/null
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicLoad_361bf1() {
+  uint atomic_result = 0u;
+  InterlockedOr(arg_0, 0, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicLoad_361bf1();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
new file mode 100644
index 0000000..74351a3
--- /dev/null
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicLoad_afcc03() {
+  int atomic_result = 0;
+  InterlockedOr(arg_0, 0, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicLoad_afcc03();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
new file mode 100644
index 0000000..7fc0623
--- /dev/null
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicLoad_fe6cc3() {
+  uint atomic_result = 0u;
+  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicLoad_fe6cc3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicLoad_fe6cc3() {
+  uint atomic_result = 0u;
+  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicLoad_fe6cc3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
new file mode 100644
index 0000000..4a35e2c
--- /dev/null
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicMax_51b9be() {
+  uint atomic_result = 0u;
+  InterlockedMax(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicMax_51b9be();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicMax_51b9be() {
+  uint atomic_result = 0u;
+  InterlockedMax(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicMax_51b9be();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
new file mode 100644
index 0000000..5c77b71
--- /dev/null
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicMax_92aa72() {
+  int atomic_result = 0;
+  InterlockedMax(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicMax_92aa72();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicMax_92aa72() {
+  int atomic_result = 0;
+  InterlockedMax(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicMax_92aa72();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
new file mode 100644
index 0000000..526868b
--- /dev/null
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicMax_a89cc3() {
+  int atomic_result = 0;
+  InterlockedMax(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicMax_a89cc3();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
new file mode 100644
index 0000000..e34d9e9
--- /dev/null
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicMax_beccfc() {
+  uint atomic_result = 0u;
+  InterlockedMax(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicMax_beccfc();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
new file mode 100644
index 0000000..cf4724c
--- /dev/null
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicMin_278235() {
+  int atomic_result = 0;
+  InterlockedMin(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicMin_278235();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
new file mode 100644
index 0000000..ade2280
--- /dev/null
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicMin_69d383() {
+  uint atomic_result = 0u;
+  InterlockedMin(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicMin_69d383();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
new file mode 100644
index 0000000..da27730
--- /dev/null
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicMin_8e38dc() {
+  int atomic_result = 0;
+  InterlockedMin(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicMin_8e38dc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicMin_8e38dc() {
+  int atomic_result = 0;
+  InterlockedMin(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicMin_8e38dc();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
new file mode 100644
index 0000000..719cf8e
--- /dev/null
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicMin_c67a74() {
+  uint atomic_result = 0u;
+  InterlockedMin(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicMin_c67a74();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicMin_c67a74() {
+  uint atomic_result = 0u;
+  InterlockedMin(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicMin_c67a74();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
new file mode 100644
index 0000000..6638375
--- /dev/null
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicOr_5e3d61() {
+  uint atomic_result = 0u;
+  InterlockedOr(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicOr_5e3d61();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
new file mode 100644
index 0000000..85663d2
--- /dev/null
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicOr_5e95d4() {
+  uint atomic_result = 0u;
+  InterlockedOr(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicOr_5e95d4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicOr_5e95d4() {
+  uint atomic_result = 0u;
+  InterlockedOr(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicOr_5e95d4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
new file mode 100644
index 0000000..9996d05
--- /dev/null
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicOr_8d96a0() {
+  int atomic_result = 0;
+  InterlockedOr(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicOr_8d96a0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicOr_8d96a0() {
+  int atomic_result = 0;
+  InterlockedOr(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicOr_8d96a0();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
new file mode 100644
index 0000000..239746d
--- /dev/null
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicOr_d09248() {
+  int atomic_result = 0;
+  InterlockedOr(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicOr_d09248();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
new file mode 100644
index 0000000..29aec50
--- /dev/null
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicStore_726882() {
+  uint atomic_result = 0u;
+  InterlockedExchange(arg_0, 1u, atomic_result);
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicStore_726882();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
new file mode 100644
index 0000000..cd08ad3
--- /dev/null
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
@@ -0,0 +1,43 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicStore_8bea94() {
+  int atomic_result = 0;
+  InterlockedExchange(arg_0, 1, atomic_result);
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicStore_8bea94();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
new file mode 100644
index 0000000..1f768b3
--- /dev/null
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
@@ -0,0 +1,61 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicStore_cdc29e() {
+  uint atomic_result = 0u;
+  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
+}
+
+void fragment_main() {
+  atomicStore_cdc29e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicStore_cdc29e() {
+  uint atomic_result = 0u;
+  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicStore_cdc29e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
new file mode 100644
index 0000000..6df74dc
--- /dev/null
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
@@ -0,0 +1,61 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicStore_d1e9a6() {
+  int atomic_result = 0;
+  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
+}
+
+void fragment_main() {
+  atomicStore_d1e9a6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicStore_d1e9a6() {
+  int atomic_result = 0;
+  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicStore_d1e9a6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
new file mode 100644
index 0000000..1da7814
--- /dev/null
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicSub_051100() {
+  int atomic_result = 0;
+  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicSub_051100();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicSub_051100() {
+  int atomic_result = 0;
+  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicSub_051100();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
new file mode 100644
index 0000000..58896e8
--- /dev/null
+++ b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicSub_0d26c2() {
+  uint atomic_result = 0u;
+  InterlockedAdd(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicSub_0d26c2();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
new file mode 100644
index 0000000..13a73bc
--- /dev/null
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicSub_15bfc9() {
+  uint atomic_result = 0u;
+  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicSub_15bfc9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicSub_15bfc9() {
+  uint atomic_result = 0u;
+  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicSub_15bfc9();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
new file mode 100644
index 0000000..83ef6a0
--- /dev/null
+++ b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicSub_77883a() {
+  int atomic_result = 0;
+  InterlockedAdd(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicSub_77883a();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
new file mode 100644
index 0000000..9e9f4ca
--- /dev/null
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicXor_54510e() {
+  uint atomic_result = 0u;
+  InterlockedXor(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+void fragment_main() {
+  atomicXor_54510e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  uint arg_0;
+} sb_rw;
+
+void atomicXor_54510e() {
+  uint atomic_result = 0u;
+  InterlockedXor(sb_rw.arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicXor_54510e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
new file mode 100644
index 0000000..62485ed
--- /dev/null
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int arg_0;
+
+void atomicXor_75dc95() {
+  int atomic_result = 0;
+  InterlockedXor(arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    int atomic_result_1 = 0;
+    InterlockedExchange(arg_0, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicXor_75dc95();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
new file mode 100644
index 0000000..0a43b25
--- /dev/null
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
@@ -0,0 +1,63 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicXor_c1b78c() {
+  int atomic_result = 0;
+  InterlockedXor(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+void fragment_main() {
+  atomicXor_c1b78c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SB_RW_1 {
+  int arg_0;
+} sb_rw;
+
+void atomicXor_c1b78c() {
+  int atomic_result = 0;
+  InterlockedXor(sb_rw.arg_0, 1, atomic_result);
+  int res = atomic_result;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  atomicXor_c1b78c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
new file mode 100644
index 0000000..a68b9b6
--- /dev/null
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared uint arg_0;
+
+void atomicXor_c8e6be() {
+  uint atomic_result = 0u;
+  InterlockedXor(arg_0, 1u, atomic_result);
+  uint res = atomic_result;
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void compute_main_inner(uint local_invocation_index) {
+  {
+    uint atomic_result_1 = 0u;
+    InterlockedExchange(arg_0, 0u, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  atomicXor_c8e6be();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main(tint_symbol_1 tint_symbol) {
+  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);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl b/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
new file mode 100644
index 0000000..2a3b135
--- /dev/null
+++ b/test/intrinsics/gen/ceil/34064b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ceil_34064b() {
+  vec3 res = ceil(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ceil_34064b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_34064b() {
+  vec3 res = ceil(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ceil_34064b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_34064b() {
+  vec3 res = ceil(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9a9c143
--- /dev/null
+++ b/test/intrinsics/gen/ceil/678655.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ceil_678655() {
+  float res = ceil(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ceil_678655();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_678655() {
+  float res = ceil(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ceil_678655();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_678655() {
+  float res = ceil(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..58113d5
--- /dev/null
+++ b/test/intrinsics/gen/ceil/96f597.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ceil_96f597() {
+  vec2 res = ceil(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ceil_96f597();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_96f597() {
+  vec2 res = ceil(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ceil_96f597();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_96f597() {
+  vec2 res = ceil(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..51d5751
--- /dev/null
+++ b/test/intrinsics/gen/ceil/b74c16.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ceil_b74c16() {
+  vec4 res = ceil(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ceil_b74c16();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_b74c16() {
+  vec4 res = ceil(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ceil_b74c16();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ceil_b74c16() {
+  vec4 res = ceil(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3ec47cc
--- /dev/null
+++ b/test/intrinsics/gen/clamp/0acf8f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_0acf8f() {
+  vec2 res = clamp(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_0acf8f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_0acf8f() {
+  vec2 res = clamp(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_0acf8f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_0acf8f() {
+  vec2 res = clamp(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ed04508
--- /dev/null
+++ b/test/intrinsics/gen/clamp/1a32e3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_1a32e3() {
+  ivec4 res = clamp(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_1a32e3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_1a32e3() {
+  ivec4 res = clamp(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_1a32e3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_1a32e3() {
+  ivec4 res = clamp(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..43ee8b9
--- /dev/null
+++ b/test/intrinsics/gen/clamp/2bd567.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_2bd567() {
+  float res = clamp(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_2bd567();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_2bd567() {
+  float res = clamp(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_2bd567();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_2bd567() {
+  float res = clamp(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..590083d
--- /dev/null
+++ b/test/intrinsics/gen/clamp/2bde41.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_2bde41() {
+  vec4 res = clamp(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_2bde41();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_2bde41() {
+  vec4 res = clamp(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_2bde41();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_2bde41() {
+  vec4 res = clamp(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f3e3ed3
--- /dev/null
+++ b/test/intrinsics/gen/clamp/548fc7.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_548fc7() {
+  uvec3 res = clamp(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_548fc7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_548fc7() {
+  uvec3 res = clamp(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_548fc7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_548fc7() {
+  uvec3 res = clamp(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e68c707
--- /dev/null
+++ b/test/intrinsics/gen/clamp/5f0819.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_5f0819() {
+  ivec3 res = clamp(ivec3(0, 0, 0), ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_5f0819();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_5f0819() {
+  ivec3 res = clamp(ivec3(0, 0, 0), ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_5f0819();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_5f0819() {
+  ivec3 res = clamp(ivec3(0, 0, 0), ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..675c22f
--- /dev/null
+++ b/test/intrinsics/gen/clamp/6c1749.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_6c1749() {
+  ivec2 res = clamp(ivec2(0, 0), ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_6c1749();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_6c1749() {
+  ivec2 res = clamp(ivec2(0, 0), ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_6c1749();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_6c1749() {
+  ivec2 res = clamp(ivec2(0, 0), ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1805a75
--- /dev/null
+++ b/test/intrinsics/gen/clamp/7706d7.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_7706d7() {
+  uvec2 res = clamp(uvec2(0u, 0u), uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_7706d7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_7706d7() {
+  uvec2 res = clamp(uvec2(0u, 0u), uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_7706d7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_7706d7() {
+  uvec2 res = clamp(uvec2(0u, 0u), uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0b7c470
--- /dev/null
+++ b/test/intrinsics/gen/clamp/867397.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_867397() {
+  vec3 res = clamp(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_867397();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_867397() {
+  vec3 res = clamp(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_867397();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_867397() {
+  vec3 res = clamp(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..23ba3e4
--- /dev/null
+++ b/test/intrinsics/gen/clamp/a2de25.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_a2de25() {
+  uint res = clamp(1u, 1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_a2de25();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_a2de25() {
+  uint res = clamp(1u, 1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_a2de25();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_a2de25() {
+  uint res = clamp(1u, 1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4337f3e
--- /dev/null
+++ b/test/intrinsics/gen/clamp/b07c65.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_b07c65() {
+  int res = clamp(1, 1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_b07c65();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_b07c65() {
+  int res = clamp(1, 1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_b07c65();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_b07c65() {
+  int res = clamp(1, 1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..476dca9
--- /dev/null
+++ b/test/intrinsics/gen/clamp/bd43ce.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void clamp_bd43ce() {
+  uvec4 res = clamp(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  clamp_bd43ce();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_bd43ce() {
+  uvec4 res = clamp(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  clamp_bd43ce();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void clamp_bd43ce() {
+  uvec4 res = clamp(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..432f4be
--- /dev/null
+++ b/test/intrinsics/gen/cos/16dc15.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cos_16dc15() {
+  vec3 res = cos(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cos_16dc15();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_16dc15() {
+  vec3 res = cos(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cos_16dc15();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_16dc15() {
+  vec3 res = cos(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ea59c7e
--- /dev/null
+++ b/test/intrinsics/gen/cos/29d66d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cos_29d66d() {
+  vec4 res = cos(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cos_29d66d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_29d66d() {
+  vec4 res = cos(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cos_29d66d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_29d66d() {
+  vec4 res = cos(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ec33d96
--- /dev/null
+++ b/test/intrinsics/gen/cos/c3b486.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cos_c3b486() {
+  vec2 res = cos(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cos_c3b486();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_c3b486() {
+  vec2 res = cos(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cos_c3b486();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_c3b486() {
+  vec2 res = cos(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..82d182c
--- /dev/null
+++ b/test/intrinsics/gen/cos/c5c28e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cos_c5c28e() {
+  float res = cos(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cos_c5c28e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_c5c28e() {
+  float res = cos(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cos_c5c28e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cos_c5c28e() {
+  float res = cos(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0e8a40a
--- /dev/null
+++ b/test/intrinsics/gen/cosh/377652.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cosh_377652() {
+  vec3 res = cosh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cosh_377652();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_377652() {
+  vec3 res = cosh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cosh_377652();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_377652() {
+  vec3 res = cosh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..bca647c
--- /dev/null
+++ b/test/intrinsics/gen/cosh/c13756.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cosh_c13756() {
+  vec2 res = cosh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cosh_c13756();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_c13756() {
+  vec2 res = cosh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cosh_c13756();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_c13756() {
+  vec2 res = cosh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..296e122
--- /dev/null
+++ b/test/intrinsics/gen/cosh/da92dd.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cosh_da92dd() {
+  float res = cosh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cosh_da92dd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_da92dd() {
+  float res = cosh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cosh_da92dd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_da92dd() {
+  float res = cosh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a15e460
--- /dev/null
+++ b/test/intrinsics/gen/cosh/e0c1de.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cosh_e0c1de() {
+  vec4 res = cosh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cosh_e0c1de();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_e0c1de() {
+  vec4 res = cosh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cosh_e0c1de();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cosh_e0c1de() {
+  vec4 res = cosh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4c444f1
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/0d0e46.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_0d0e46() {
+  uvec4 res = countbits(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_0d0e46();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_0d0e46() {
+  uvec4 res = countbits(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_0d0e46() {
+  uvec4 res = countbits(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
new file mode 100644
index 0000000..aaa2d24
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/0f7980.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_0f7980() {
+  ivec4 res = countbits(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_0f7980();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_0f7980() {
+  ivec4 res = countbits(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_0f7980() {
+  ivec4 res = countbits(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
new file mode 100644
index 0000000..603c17c
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/65d2ae.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_65d2ae() {
+  ivec3 res = countbits(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_65d2ae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_65d2ae() {
+  ivec3 res = countbits(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_65d2ae() {
+  ivec3 res = countbits(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
new file mode 100644
index 0000000..f2da622
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/690cfc.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_690cfc() {
+  uvec3 res = countbits(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_690cfc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_690cfc() {
+  uvec3 res = countbits(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_690cfc() {
+  uvec3 res = countbits(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
new file mode 100644
index 0000000..750e3d2
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/94fd81.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_94fd81() {
+  uvec2 res = countbits(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_94fd81();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_94fd81() {
+  uvec2 res = countbits(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_94fd81() {
+  uvec2 res = countbits(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
new file mode 100644
index 0000000..241a8d0
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/ae44f9.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_ae44f9() {
+  uint res = countbits(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_ae44f9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_ae44f9() {
+  uint res = countbits(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_ae44f9() {
+  uint res = countbits(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
new file mode 100644
index 0000000..f7b71d1
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/af90e2.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_af90e2() {
+  ivec2 res = countbits(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_af90e2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_af90e2() {
+  ivec2 res = countbits(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_af90e2() {
+  ivec2 res = countbits(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
new file mode 100644
index 0000000..78d84a7
--- /dev/null
+++ b/test/intrinsics/gen/countOneBits/fd88b2.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_fd88b2() {
+  int res = countbits(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  countOneBits_fd88b2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_fd88b2() {
+  int res = countbits(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void countOneBits_fd88b2() {
+  int res = countbits(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl b/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
new file mode 100644
index 0000000..dfaee60
--- /dev/null
+++ b/test/intrinsics/gen/cross/041cb0.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void cross_041cb0() {
+  vec3 res = cross(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  cross_041cb0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cross_041cb0() {
+  vec3 res = cross(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  cross_041cb0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void cross_041cb0() {
+  vec3 res = cross(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  cross_041cb0();
+  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
new file mode 100644
index 0000000..50c54d2
--- /dev/null
+++ b/test/intrinsics/gen/determinant/2b62ba.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void determinant_2b62ba() {
+  float res = determinant(mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  determinant_2b62ba();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void determinant_2b62ba() {
+  float res = determinant(mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  determinant_2b62ba();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void determinant_2b62ba() {
+  float res = determinant(mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f2b15cf
--- /dev/null
+++ b/test/intrinsics/gen/determinant/a0a87c.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void determinant_a0a87c() {
+  float res = determinant(mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  determinant_a0a87c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void determinant_a0a87c() {
+  float res = determinant(mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  determinant_a0a87c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void determinant_a0a87c() {
+  float res = determinant(mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..8117d8b
--- /dev/null
+++ b/test/intrinsics/gen/determinant/e19305.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void determinant_e19305() {
+  float res = determinant(mat2(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  determinant_e19305();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void determinant_e19305() {
+  float res = determinant(mat2(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  determinant_e19305();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void determinant_e19305() {
+  float res = determinant(mat2(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..c278ef0
--- /dev/null
+++ b/test/intrinsics/gen/distance/0657d4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void distance_0657d4() {
+  float res = distance(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  distance_0657d4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_0657d4() {
+  float res = distance(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  distance_0657d4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_0657d4() {
+  float res = distance(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..39c71e5
--- /dev/null
+++ b/test/intrinsics/gen/distance/9646ea.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void distance_9646ea() {
+  float res = distance(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  distance_9646ea();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_9646ea() {
+  float res = distance(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  distance_9646ea();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_9646ea() {
+  float res = distance(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e7dddbf
--- /dev/null
+++ b/test/intrinsics/gen/distance/aa4055.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void distance_aa4055() {
+  float res = distance(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  distance_aa4055();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_aa4055() {
+  float res = distance(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  distance_aa4055();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_aa4055() {
+  float res = distance(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..b509965
--- /dev/null
+++ b/test/intrinsics/gen/distance/cfed73.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void distance_cfed73() {
+  float res = distance(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  distance_cfed73();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_cfed73() {
+  float res = distance(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  distance_cfed73();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void distance_cfed73() {
+  float res = distance(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2e99625
--- /dev/null
+++ b/test/intrinsics/gen/dot/0c577b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void dot_0c577b() {
+  float res = dot(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_0c577b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void dot_0c577b() {
+  float res = dot(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_0c577b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void dot_0c577b() {
+  float res = dot(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..7e99a55
--- /dev/null
+++ b/test/intrinsics/gen/dot/7548a0.wgsl.expected.glsl
@@ -0,0 +1,83 @@
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec3 a, uvec3 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
+}
+
+void dot_7548a0() {
+  uint res = tint_int_dot(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_7548a0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec3 a, uvec3 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
+}
+
+void dot_7548a0() {
+  uint res = tint_int_dot(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_7548a0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec3 a, uvec3 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
+}
+
+void dot_7548a0() {
+  uint res = tint_int_dot(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..eec9252
--- /dev/null
+++ b/test/intrinsics/gen/dot/883f0e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void dot_883f0e() {
+  float res = dot(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_883f0e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void dot_883f0e() {
+  float res = dot(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_883f0e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void dot_883f0e() {
+  float res = dot(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..c620ce6
--- /dev/null
+++ b/test/intrinsics/gen/dot/97c7ee.wgsl.expected.glsl
@@ -0,0 +1,83 @@
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec2 a, uvec2 b) {
+  return a[0]*b[0] + a[1]*b[1];
+}
+
+void dot_97c7ee() {
+  uint res = tint_int_dot(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_97c7ee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec2 a, uvec2 b) {
+  return a[0]*b[0] + a[1]*b[1];
+}
+
+void dot_97c7ee() {
+  uint res = tint_int_dot(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_97c7ee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec2 a, uvec2 b) {
+  return a[0]*b[0] + a[1]*b[1];
+}
+
+void dot_97c7ee() {
+  uint res = tint_int_dot(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3959bf6
--- /dev/null
+++ b/test/intrinsics/gen/dot/ba4246.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void dot_ba4246() {
+  float res = dot(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_ba4246();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void dot_ba4246() {
+  float res = dot(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_ba4246();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void dot_ba4246() {
+  float res = dot(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..941d081
--- /dev/null
+++ b/test/intrinsics/gen/dot/e994c7.wgsl.expected.glsl
@@ -0,0 +1,83 @@
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec4 a, uvec4 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];
+}
+
+void dot_e994c7() {
+  uint res = tint_int_dot(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_e994c7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec4 a, uvec4 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];
+}
+
+void dot_e994c7() {
+  uint res = tint_int_dot(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_e994c7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_int_dot(uvec4 a, uvec4 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];
+}
+
+void dot_e994c7() {
+  uint res = tint_int_dot(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..809f017
--- /dev/null
+++ b/test/intrinsics/gen/dot/ef6b1d.wgsl.expected.glsl
@@ -0,0 +1,83 @@
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec4 a, ivec4 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];
+}
+
+void dot_ef6b1d() {
+  int res = tint_int_dot(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_ef6b1d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec4 a, ivec4 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];
+}
+
+void dot_ef6b1d() {
+  int res = tint_int_dot(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_ef6b1d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec4 a, ivec4 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3];
+}
+
+void dot_ef6b1d() {
+  int res = tint_int_dot(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..57919d4
--- /dev/null
+++ b/test/intrinsics/gen/dot/f1312c.wgsl.expected.glsl
@@ -0,0 +1,83 @@
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec3 a, ivec3 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
+}
+
+void dot_f1312c() {
+  int res = tint_int_dot(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_f1312c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec3 a, ivec3 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
+}
+
+void dot_f1312c() {
+  int res = tint_int_dot(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_f1312c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec3 a, ivec3 b) {
+  return a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
+}
+
+void dot_f1312c() {
+  int res = tint_int_dot(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..29bb327
--- /dev/null
+++ b/test/intrinsics/gen/dot/fc5f7c.wgsl.expected.glsl
@@ -0,0 +1,83 @@
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec2 a, ivec2 b) {
+  return a[0]*b[0] + a[1]*b[1];
+}
+
+void dot_fc5f7c() {
+  int res = tint_int_dot(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  dot_fc5f7c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec2 a, ivec2 b) {
+  return a[0]*b[0] + a[1]*b[1];
+}
+
+void dot_fc5f7c() {
+  int res = tint_int_dot(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  dot_fc5f7c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+int tint_int_dot(ivec2 a, ivec2 b) {
+  return a[0]*b[0] + a[1]*b[1];
+}
+
+void dot_fc5f7c() {
+  int res = tint_int_dot(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..b2c3e88
--- /dev/null
+++ b/test/intrinsics/gen/dpdx/0763f7.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdx_0763f7() {
+  vec3 res = ddx(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
new file mode 100644
index 0000000..b147755
--- /dev/null
+++ b/test/intrinsics/gen/dpdx/99edb1.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdx_99edb1() {
+  vec2 res = ddx(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
new file mode 100644
index 0000000..3201da8
--- /dev/null
+++ b/test/intrinsics/gen/dpdx/c487fa.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdx_c487fa() {
+  vec4 res = ddx(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
new file mode 100644
index 0000000..8d27891
--- /dev/null
+++ b/test/intrinsics/gen/dpdx/e263de.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdx_e263de() {
+  float res = ddx(1.0f);
+}
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
new file mode 100644
index 0000000..712cb2e
--- /dev/null
+++ b/test/intrinsics/gen/dpdxCoarse/029152.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxCoarse_029152() {
+  float res = ddx_coarse(1.0f);
+}
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
new file mode 100644
index 0000000..ca3f444
--- /dev/null
+++ b/test/intrinsics/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxCoarse_9581cf() {
+  vec2 res = ddx_coarse(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
new file mode 100644
index 0000000..d748693
--- /dev/null
+++ b/test/intrinsics/gen/dpdxCoarse/c28641.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxCoarse_c28641() {
+  vec4 res = ddx_coarse(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
new file mode 100644
index 0000000..568db44
--- /dev/null
+++ b/test/intrinsics/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxCoarse_f64d7b() {
+  vec3 res = ddx_coarse(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
new file mode 100644
index 0000000..1f79d0e
--- /dev/null
+++ b/test/intrinsics/gen/dpdxFine/8c5069.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxFine_8c5069() {
+  vec4 res = ddx_fine(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
new file mode 100644
index 0000000..5890767
--- /dev/null
+++ b/test/intrinsics/gen/dpdxFine/9631de.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxFine_9631de() {
+  vec2 res = ddx_fine(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
new file mode 100644
index 0000000..99c60ca
--- /dev/null
+++ b/test/intrinsics/gen/dpdxFine/f401a2.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxFine_f401a2() {
+  float res = ddx_fine(1.0f);
+}
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
new file mode 100644
index 0000000..3e8c68f
--- /dev/null
+++ b/test/intrinsics/gen/dpdxFine/f92fb6.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdxFine_f92fb6() {
+  vec3 res = ddx_fine(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
new file mode 100644
index 0000000..b235c27
--- /dev/null
+++ b/test/intrinsics/gen/dpdy/699a05.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdy_699a05() {
+  vec4 res = ddy(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
new file mode 100644
index 0000000..7c20e0f
--- /dev/null
+++ b/test/intrinsics/gen/dpdy/7f8d84.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdy_7f8d84() {
+  float res = ddy(1.0f);
+}
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
new file mode 100644
index 0000000..82667ce
--- /dev/null
+++ b/test/intrinsics/gen/dpdy/a8b56e.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdy_a8b56e() {
+  vec2 res = ddy(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
new file mode 100644
index 0000000..baf086e
--- /dev/null
+++ b/test/intrinsics/gen/dpdy/feb40f.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdy_feb40f() {
+  vec3 res = ddy(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
new file mode 100644
index 0000000..a4f7518
--- /dev/null
+++ b/test/intrinsics/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyCoarse_3e1ab4() {
+  vec2 res = ddy_coarse(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
new file mode 100644
index 0000000..3872654
--- /dev/null
+++ b/test/intrinsics/gen/dpdyCoarse/445d24.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyCoarse_445d24() {
+  vec4 res = ddy_coarse(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
new file mode 100644
index 0000000..e650118
--- /dev/null
+++ b/test/intrinsics/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyCoarse_870a7e() {
+  float res = ddy_coarse(1.0f);
+}
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
new file mode 100644
index 0000000..b76372c
--- /dev/null
+++ b/test/intrinsics/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyCoarse_ae1873() {
+  vec3 res = ddy_coarse(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
new file mode 100644
index 0000000..903fba0
--- /dev/null
+++ b/test/intrinsics/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyFine_1fb7ab() {
+  vec3 res = ddy_fine(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
new file mode 100644
index 0000000..4aafeb0
--- /dev/null
+++ b/test/intrinsics/gen/dpdyFine/6eb673.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyFine_6eb673() {
+  float res = ddy_fine(1.0f);
+}
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
new file mode 100644
index 0000000..532ff81
--- /dev/null
+++ b/test/intrinsics/gen/dpdyFine/d0a648.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyFine_d0a648() {
+  vec4 res = ddy_fine(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
new file mode 100644
index 0000000..89a7b2c
--- /dev/null
+++ b/test/intrinsics/gen/dpdyFine/df33aa.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void dpdyFine_df33aa() {
+  vec2 res = ddy_fine(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
new file mode 100644
index 0000000..f1882e6
--- /dev/null
+++ b/test/intrinsics/gen/exp/0f70eb.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp_0f70eb() {
+  vec4 res = exp(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp_0f70eb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_0f70eb() {
+  vec4 res = exp(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp_0f70eb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_0f70eb() {
+  vec4 res = exp(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..dff1bfe
--- /dev/null
+++ b/test/intrinsics/gen/exp/1951e7.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp_1951e7() {
+  vec2 res = exp(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp_1951e7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_1951e7() {
+  vec2 res = exp(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp_1951e7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_1951e7() {
+  vec2 res = exp(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a46e266
--- /dev/null
+++ b/test/intrinsics/gen/exp/771fd2.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp_771fd2() {
+  float res = exp(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp_771fd2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_771fd2() {
+  float res = exp(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp_771fd2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_771fd2() {
+  float res = exp(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..aa82fb1
--- /dev/null
+++ b/test/intrinsics/gen/exp/d98450.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp_d98450() {
+  vec3 res = exp(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp_d98450();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_d98450() {
+  vec3 res = exp(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp_d98450();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp_d98450() {
+  vec3 res = exp(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..214840f
--- /dev/null
+++ b/test/intrinsics/gen/exp2/1f8680.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp2_1f8680() {
+  vec3 res = exp2(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp2_1f8680();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_1f8680() {
+  vec3 res = exp2(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp2_1f8680();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_1f8680() {
+  vec3 res = exp2(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..736af83
--- /dev/null
+++ b/test/intrinsics/gen/exp2/a9d0a7.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp2_a9d0a7() {
+  vec4 res = exp2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp2_a9d0a7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_a9d0a7() {
+  vec4 res = exp2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp2_a9d0a7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_a9d0a7() {
+  vec4 res = exp2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..08834d9
--- /dev/null
+++ b/test/intrinsics/gen/exp2/d6777c.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp2_d6777c() {
+  vec2 res = exp2(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp2_d6777c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_d6777c() {
+  vec2 res = exp2(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp2_d6777c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_d6777c() {
+  vec2 res = exp2(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..313278f
--- /dev/null
+++ b/test/intrinsics/gen/exp2/dea523.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void exp2_dea523() {
+  float res = exp2(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  exp2_dea523();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_dea523() {
+  float res = exp2(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  exp2_dea523();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void exp2_dea523() {
+  float res = exp2(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a582f90
--- /dev/null
+++ b/test/intrinsics/gen/faceForward/5afbd5.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void faceForward_5afbd5() {
+  vec3 res = faceforward(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  faceForward_5afbd5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void faceForward_5afbd5() {
+  vec3 res = faceforward(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  faceForward_5afbd5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void faceForward_5afbd5() {
+  vec3 res = faceforward(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..791ba27
--- /dev/null
+++ b/test/intrinsics/gen/faceForward/b316e5.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void faceForward_b316e5() {
+  vec4 res = faceforward(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  faceForward_b316e5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void faceForward_b316e5() {
+  vec4 res = faceforward(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  faceForward_b316e5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void faceForward_b316e5() {
+  vec4 res = faceforward(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a1bd76b
--- /dev/null
+++ b/test/intrinsics/gen/faceForward/e6908b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void faceForward_e6908b() {
+  vec2 res = faceforward(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  faceForward_e6908b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void faceForward_e6908b() {
+  vec2 res = faceforward(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  faceForward_e6908b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void faceForward_e6908b() {
+  vec2 res = faceforward(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..25ea844
--- /dev/null
+++ b/test/intrinsics/gen/floor/3bccc4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void floor_3bccc4() {
+  vec4 res = floor(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  floor_3bccc4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_3bccc4() {
+  vec4 res = floor(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  floor_3bccc4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_3bccc4() {
+  vec4 res = floor(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d92b849
--- /dev/null
+++ b/test/intrinsics/gen/floor/5fc9ac.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void floor_5fc9ac() {
+  vec2 res = floor(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  floor_5fc9ac();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_5fc9ac() {
+  vec2 res = floor(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  floor_5fc9ac();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_5fc9ac() {
+  vec2 res = floor(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..bae81bb
--- /dev/null
+++ b/test/intrinsics/gen/floor/60d7ea.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void floor_60d7ea() {
+  vec3 res = floor(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  floor_60d7ea();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_60d7ea() {
+  vec3 res = floor(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  floor_60d7ea();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_60d7ea() {
+  vec3 res = floor(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e26964e
--- /dev/null
+++ b/test/intrinsics/gen/floor/66f154.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void floor_66f154() {
+  float res = floor(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  floor_66f154();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_66f154() {
+  float res = floor(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  floor_66f154();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void floor_66f154() {
+  float res = floor(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..7bcc736
--- /dev/null
+++ b/test/intrinsics/gen/fma/26a7a9.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fma_26a7a9() {
+  vec2 res = mad(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fma_26a7a9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_26a7a9() {
+  vec2 res = mad(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_26a7a9() {
+  vec2 res = mad(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl b/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
new file mode 100644
index 0000000..54a7577
--- /dev/null
+++ b/test/intrinsics/gen/fma/6a3283.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fma_6a3283() {
+  vec4 res = mad(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fma_6a3283();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_6a3283() {
+  vec4 res = mad(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_6a3283() {
+  vec4 res = mad(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
new file mode 100644
index 0000000..a48ff5c
--- /dev/null
+++ b/test/intrinsics/gen/fma/c10ba3.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fma_c10ba3() {
+  float res = mad(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fma_c10ba3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'mad' : no matching overloaded function found 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_c10ba3() {
+  float res = mad(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_c10ba3() {
+  float res = mad(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
new file mode 100644
index 0000000..1a0d92d
--- /dev/null
+++ b/test/intrinsics/gen/fma/e17c5c.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fma_e17c5c() {
+  vec3 res = mad(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fma_e17c5c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_e17c5c() {
+  vec3 res = mad(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fma_e17c5c() {
+  vec3 res = mad(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
new file mode 100644
index 0000000..9b128ba
--- /dev/null
+++ b/test/intrinsics/gen/fract/8bc1e9.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fract_8bc1e9() {
+  vec4 res = frac(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fract_8bc1e9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_8bc1e9() {
+  vec4 res = frac(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_8bc1e9() {
+  vec4 res = frac(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl b/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
new file mode 100644
index 0000000..8e6e966
--- /dev/null
+++ b/test/intrinsics/gen/fract/943cb1.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fract_943cb1() {
+  vec2 res = frac(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fract_943cb1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_943cb1() {
+  vec2 res = frac(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_943cb1() {
+  vec2 res = frac(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl b/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
new file mode 100644
index 0000000..2ea3ff8
--- /dev/null
+++ b/test/intrinsics/gen/fract/a49758.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fract_a49758() {
+  vec3 res = frac(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fract_a49758();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_a49758() {
+  vec3 res = frac(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_a49758() {
+  vec3 res = frac(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
new file mode 100644
index 0000000..884ec28
--- /dev/null
+++ b/test/intrinsics/gen/fract/fa5c71.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void fract_fa5c71() {
+  float res = frac(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  fract_fa5c71();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'frac' : no matching overloaded function found 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_fa5c71() {
+  float res = frac(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void fract_fa5c71() {
+  float res = frac(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/frexp/12f1da.wgsl.expected.glsl b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.glsl
new file mode 100644
index 0000000..f0df205
--- /dev/null
+++ b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result {
+  float sig;
+  int exp;
+};
+frexp_result tint_frexp(float param_0) {
+  float exp;
+  float sig = frexp(param_0, exp);
+  frexp_result result = {sig, int(exp)};
+  return result;
+}
+
+
+void frexp_12f1da() {
+  frexp_result res = tint_frexp(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  frexp_12f1da();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result {
+  float sig;
+  int exp;
+};
+frexp_result tint_frexp(float param_0) {
+  float exp;
+  float sig = frexp(param_0, exp);
+  frexp_result result = {sig, int(exp)};
+  return result;
+}
+
+
+void frexp_12f1da() {
+  frexp_result res = tint_frexp(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  frexp_12f1da();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:10: 'frexp' : no matching overloaded function found 
+ERROR: 0:10: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result {
+  float sig;
+  int exp;
+};
+frexp_result tint_frexp(float param_0) {
+  float exp;
+  float sig = frexp(param_0, exp);
+  frexp_result result = {sig, int(exp)};
+  return result;
+}
+
+
+void frexp_12f1da() {
+  frexp_result res = tint_frexp(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  frexp_12f1da();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:10: 'frexp' : no matching overloaded function found 
+ERROR: 0:10: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.glsl b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.glsl
new file mode 100644
index 0000000..08954fc
--- /dev/null
+++ b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec3 {
+  vec3 sig;
+  ivec3 exp;
+};
+frexp_result_vec3 tint_frexp(vec3 param_0) {
+  float3 exp;
+  float3 sig = frexp(param_0, exp);
+  frexp_result_vec3 result = {sig, int3(exp)};
+  return result;
+}
+
+
+void frexp_a0eb3b() {
+  frexp_result_vec3 res = tint_frexp(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  frexp_a0eb3b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float3' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec3 {
+  vec3 sig;
+  ivec3 exp;
+};
+frexp_result_vec3 tint_frexp(vec3 param_0) {
+  float3 exp;
+  float3 sig = frexp(param_0, exp);
+  frexp_result_vec3 result = {sig, int3(exp)};
+  return result;
+}
+
+
+void frexp_a0eb3b() {
+  frexp_result_vec3 res = tint_frexp(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  frexp_a0eb3b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float3' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec3 {
+  vec3 sig;
+  ivec3 exp;
+};
+frexp_result_vec3 tint_frexp(vec3 param_0) {
+  float3 exp;
+  float3 sig = frexp(param_0, exp);
+  frexp_result_vec3 result = {sig, int3(exp)};
+  return result;
+}
+
+
+void frexp_a0eb3b() {
+  frexp_result_vec3 res = tint_frexp(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  frexp_a0eb3b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float3' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/frexp/d80367.wgsl.expected.glsl b/test/intrinsics/gen/frexp/d80367.wgsl.expected.glsl
new file mode 100644
index 0000000..40a2643
--- /dev/null
+++ b/test/intrinsics/gen/frexp/d80367.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec4 {
+  vec4 sig;
+  ivec4 exp;
+};
+frexp_result_vec4 tint_frexp(vec4 param_0) {
+  float4 exp;
+  float4 sig = frexp(param_0, exp);
+  frexp_result_vec4 result = {sig, int4(exp)};
+  return result;
+}
+
+
+void frexp_d80367() {
+  frexp_result_vec4 res = tint_frexp(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  frexp_d80367();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float4' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec4 {
+  vec4 sig;
+  ivec4 exp;
+};
+frexp_result_vec4 tint_frexp(vec4 param_0) {
+  float4 exp;
+  float4 sig = frexp(param_0, exp);
+  frexp_result_vec4 result = {sig, int4(exp)};
+  return result;
+}
+
+
+void frexp_d80367() {
+  frexp_result_vec4 res = tint_frexp(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  frexp_d80367();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float4' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec4 {
+  vec4 sig;
+  ivec4 exp;
+};
+frexp_result_vec4 tint_frexp(vec4 param_0) {
+  float4 exp;
+  float4 sig = frexp(param_0, exp);
+  frexp_result_vec4 result = {sig, int4(exp)};
+  return result;
+}
+
+
+void frexp_d80367() {
+  frexp_result_vec4 res = tint_frexp(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  frexp_d80367();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float4' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/frexp/db0637.wgsl.expected.glsl b/test/intrinsics/gen/frexp/db0637.wgsl.expected.glsl
new file mode 100644
index 0000000..34e2490
--- /dev/null
+++ b/test/intrinsics/gen/frexp/db0637.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec2 {
+  vec2 sig;
+  ivec2 exp;
+};
+frexp_result_vec2 tint_frexp(vec2 param_0) {
+  float2 exp;
+  float2 sig = frexp(param_0, exp);
+  frexp_result_vec2 result = {sig, int2(exp)};
+  return result;
+}
+
+
+void frexp_db0637() {
+  frexp_result_vec2 res = tint_frexp(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  frexp_db0637();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float2' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec2 {
+  vec2 sig;
+  ivec2 exp;
+};
+frexp_result_vec2 tint_frexp(vec2 param_0) {
+  float2 exp;
+  float2 sig = frexp(param_0, exp);
+  frexp_result_vec2 result = {sig, int2(exp)};
+  return result;
+}
+
+
+void frexp_db0637() {
+  frexp_result_vec2 res = tint_frexp(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  frexp_db0637();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float2' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct frexp_result_vec2 {
+  vec2 sig;
+  ivec2 exp;
+};
+frexp_result_vec2 tint_frexp(vec2 param_0) {
+  float2 exp;
+  float2 sig = frexp(param_0, exp);
+  frexp_result_vec2 result = {sig, int2(exp)};
+  return result;
+}
+
+
+void frexp_db0637() {
+  frexp_result_vec2 res = tint_frexp(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  frexp_db0637();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float2' : undeclared identifier 
+ERROR: 0:9: '' : 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
new file mode 100644
index 0000000..a0affd9
--- /dev/null
+++ b/test/intrinsics/gen/fwidth/5d1b39.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidth_5d1b39() {
+  vec3 res = fwidth(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..3a38177
--- /dev/null
+++ b/test/intrinsics/gen/fwidth/b83ebb.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidth_b83ebb() {
+  vec2 res = fwidth(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..6d23f98
--- /dev/null
+++ b/test/intrinsics/gen/fwidth/d2ab9a.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidth_d2ab9a() {
+  vec4 res = fwidth(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..fa13be7
--- /dev/null
+++ b/test/intrinsics/gen/fwidth/df38ef.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidth_df38ef() {
+  float res = fwidth(1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..0fa8940
--- /dev/null
+++ b/test/intrinsics/gen/fwidthCoarse/159c8a.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthCoarse_159c8a() {
+  float res = fwidth(1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..13b779c
--- /dev/null
+++ b/test/intrinsics/gen/fwidthCoarse/1e59d9.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthCoarse_1e59d9() {
+  vec3 res = fwidth(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..6f6634b
--- /dev/null
+++ b/test/intrinsics/gen/fwidthCoarse/4e4fc4.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthCoarse_4e4fc4() {
+  vec4 res = fwidth(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..48db5ee
--- /dev/null
+++ b/test/intrinsics/gen/fwidthCoarse/e653f7.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthCoarse_e653f7() {
+  vec2 res = fwidth(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..46ed62a
--- /dev/null
+++ b/test/intrinsics/gen/fwidthFine/523fdc.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthFine_523fdc() {
+  vec3 res = fwidth(vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..ce3dbad
--- /dev/null
+++ b/test/intrinsics/gen/fwidthFine/68f4ef.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthFine_68f4ef() {
+  vec4 res = fwidth(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..4441b46
--- /dev/null
+++ b/test/intrinsics/gen/fwidthFine/f1742d.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthFine_f1742d() {
+  float res = fwidth(1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..bf921e2
--- /dev/null
+++ b/test/intrinsics/gen/fwidthFine/ff6aa0.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+void fwidthFine_ff6aa0() {
+  vec2 res = fwidth(vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  fwidthFine_ff6aa0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
diff --git a/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.glsl b/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.glsl
new file mode 100644
index 0000000..09337ec
--- /dev/null
+++ b/test/intrinsics/gen/ignore/2a6ac2.wgsl.expected.glsl
@@ -0,0 +1,81 @@
+intrinsics/gen/ignore/2a6ac2.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void ignore_2a6ac2() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_2a6ac2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void ignore_2a6ac2() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_2a6ac2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void ignore_2a6ac2() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_2a6ac2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/gen/ignore/5016e5.wgsl.expected.glsl b/test/intrinsics/gen/ignore/5016e5.wgsl.expected.glsl
new file mode 100644
index 0000000..91b05a1
--- /dev/null
+++ b/test/intrinsics/gen/ignore/5016e5.wgsl.expected.glsl
@@ -0,0 +1,104 @@
+SKIP: FAILED
+
+intrinsics/gen/ignore/5016e5.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+
+
+void ignore_5016e5() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_5016e5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_0' : undeclared identifier 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+
+void ignore_5016e5() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_5016e5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_0' : undeclared identifier 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+
+void ignore_5016e5() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_5016e5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_0' : undeclared identifier 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/ignore/509355.wgsl.expected.glsl b/test/intrinsics/gen/ignore/509355.wgsl.expected.glsl
new file mode 100644
index 0000000..11d4922
--- /dev/null
+++ b/test/intrinsics/gen/ignore/509355.wgsl.expected.glsl
@@ -0,0 +1,81 @@
+intrinsics/gen/ignore/509355.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void ignore_509355() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_509355();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void ignore_509355() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_509355();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void ignore_509355() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_509355();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
new file mode 100644
index 0000000..db87165
--- /dev/null
+++ b/test/intrinsics/gen/ignore/51aeb7.wgsl.expected.glsl
@@ -0,0 +1,75 @@
+intrinsics/gen/ignore/51aeb7.wgsl:28:3 warning: use of deprecated intrinsic
+  ignore(1);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+void ignore_51aeb7() {
+  1;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_51aeb7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_51aeb7() {
+  1;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_51aeb7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_51aeb7() {
+  1;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_51aeb7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.glsl b/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.glsl
new file mode 100644
index 0000000..8f79e31
--- /dev/null
+++ b/test/intrinsics/gen/ignore/5c9edf.wgsl.expected.glsl
@@ -0,0 +1,81 @@
+intrinsics/gen/ignore/5c9edf.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void ignore_5c9edf() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_5c9edf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void ignore_5c9edf() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_5c9edf();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void ignore_5c9edf() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_5c9edf();
+  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
new file mode 100644
index 0000000..0ce2ba0
--- /dev/null
+++ b/test/intrinsics/gen/ignore/6698df.wgsl.expected.glsl
@@ -0,0 +1,75 @@
+intrinsics/gen/ignore/6698df.wgsl:28:3 warning: use of deprecated intrinsic
+  ignore(1u);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+void ignore_6698df() {
+  1u;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_6698df();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_6698df() {
+  1u;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_6698df();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_6698df() {
+  1u;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_6698df();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/gen/ignore/ad88be.wgsl.expected.glsl b/test/intrinsics/gen/ignore/ad88be.wgsl.expected.glsl
new file mode 100644
index 0000000..b8116d6
--- /dev/null
+++ b/test/intrinsics/gen/ignore/ad88be.wgsl.expected.glsl
@@ -0,0 +1,104 @@
+SKIP: FAILED
+
+intrinsics/gen/ignore/ad88be.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void ignore_ad88be() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_ad88be();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void ignore_ad88be() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_ad88be();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void ignore_ad88be() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_ad88be();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/ignore/b469af.wgsl.expected.glsl b/test/intrinsics/gen/ignore/b469af.wgsl.expected.glsl
new file mode 100644
index 0000000..6c593b9
--- /dev/null
+++ b/test/intrinsics/gen/ignore/b469af.wgsl.expected.glsl
@@ -0,0 +1,104 @@
+SKIP: FAILED
+
+intrinsics/gen/ignore/b469af.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+
+
+void ignore_b469af() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_b469af();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_0' : undeclared identifier 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+
+void ignore_b469af() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_b469af();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_0' : undeclared identifier 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+
+
+void ignore_b469af() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_b469af();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_0' : undeclared identifier 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.glsl b/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.glsl
new file mode 100644
index 0000000..69ecc99
--- /dev/null
+++ b/test/intrinsics/gen/ignore/c8a0ee.wgsl.expected.glsl
@@ -0,0 +1,81 @@
+intrinsics/gen/ignore/c8a0ee.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void ignore_c8a0ee() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_c8a0ee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void ignore_c8a0ee() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_c8a0ee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void ignore_c8a0ee() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_c8a0ee();
+  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
new file mode 100644
index 0000000..a64b4e1
--- /dev/null
+++ b/test/intrinsics/gen/ignore/d91a2f.wgsl.expected.glsl
@@ -0,0 +1,75 @@
+intrinsics/gen/ignore/d91a2f.wgsl:28:3 warning: use of deprecated intrinsic
+  ignore(1.0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+void ignore_d91a2f() {
+  1.0f;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_d91a2f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_d91a2f() {
+  1.0f;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_d91a2f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_d91a2f() {
+  1.0f;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_d91a2f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/gen/ignore/e0187b.wgsl.expected.glsl b/test/intrinsics/gen/ignore/e0187b.wgsl.expected.glsl
new file mode 100644
index 0000000..e209270
--- /dev/null
+++ b/test/intrinsics/gen/ignore/e0187b.wgsl.expected.glsl
@@ -0,0 +1,81 @@
+intrinsics/gen/ignore/e0187b.wgsl:29:3 warning: use of deprecated intrinsic
+  ignore(arg_0);
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void ignore_e0187b() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_e0187b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void ignore_e0187b() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_e0187b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void ignore_e0187b() {
+  arg_0;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  ignore_e0187b();
+  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
new file mode 100644
index 0000000..91a8f8d
--- /dev/null
+++ b/test/intrinsics/gen/ignore/f414a6.wgsl.expected.glsl
@@ -0,0 +1,75 @@
+intrinsics/gen/ignore/f414a6.wgsl:28:3 warning: use of deprecated intrinsic
+  ignore(bool());
+  ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+void ignore_f414a6() {
+  false;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ignore_f414a6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_f414a6() {
+  false;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ignore_f414a6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ignore_f414a6() {
+  false;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e73db6b
--- /dev/null
+++ b/test/intrinsics/gen/inverseSqrt/84407e.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_84407e() {
+  float res = rsqrt(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  inverseSqrt_84407e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'rsqrt' : no matching overloaded function found 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_84407e() {
+  float res = rsqrt(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_84407e() {
+  float res = rsqrt(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
new file mode 100644
index 0000000..20a6562
--- /dev/null
+++ b/test/intrinsics/gen/inverseSqrt/8f2bd2.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_8f2bd2() {
+  vec2 res = rsqrt(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  inverseSqrt_8f2bd2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_8f2bd2() {
+  vec2 res = rsqrt(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_8f2bd2() {
+  vec2 res = rsqrt(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
new file mode 100644
index 0000000..6e2818a
--- /dev/null
+++ b/test/intrinsics/gen/inverseSqrt/b197b1.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_b197b1() {
+  vec3 res = rsqrt(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  inverseSqrt_b197b1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_b197b1() {
+  vec3 res = rsqrt(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_b197b1() {
+  vec3 res = rsqrt(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
new file mode 100644
index 0000000..ab3fead
--- /dev/null
+++ b/test/intrinsics/gen/inverseSqrt/c22347.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_c22347() {
+  vec4 res = rsqrt(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  inverseSqrt_c22347();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_c22347() {
+  vec4 res = rsqrt(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void inverseSqrt_c22347() {
+  vec4 res = rsqrt(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
new file mode 100644
index 0000000..74f2374
--- /dev/null
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void isFinite_34d32b() {
+  bvec2 res = isfinite(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isFinite_34d32b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_34d32b() {
+  bvec2 res = isfinite(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_34d32b() {
+  bvec2 res = isfinite(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
new file mode 100644
index 0000000..ade322a
--- /dev/null
+++ b/test/intrinsics/gen/isFinite/426f9f.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void isFinite_426f9f() {
+  bool res = isfinite(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isFinite_426f9f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_426f9f() {
+  bool res = isfinite(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_426f9f() {
+  bool res = isfinite(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
new file mode 100644
index 0000000..9fedc49
--- /dev/null
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void isFinite_8a23ad() {
+  bvec3 res = isfinite(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isFinite_8a23ad();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_8a23ad() {
+  bvec3 res = isfinite(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_8a23ad() {
+  bvec3 res = isfinite(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
new file mode 100644
index 0000000..5629d2b
--- /dev/null
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void isFinite_f31987() {
+  bvec4 res = isfinite(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isFinite_f31987();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_f31987() {
+  bvec4 res = isfinite(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void isFinite_f31987() {
+  bvec4 res = isfinite(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
new file mode 100644
index 0000000..42c33b6
--- /dev/null
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isInf_666f2a() {
+  bvec3 res = isinf(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isInf_666f2a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_666f2a() {
+  bvec3 res = isinf(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isInf_666f2a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_666f2a() {
+  bvec3 res = isinf(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..7aee66b
--- /dev/null
+++ b/test/intrinsics/gen/isInf/7bd98f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isInf_7bd98f() {
+  bool res = isinf(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isInf_7bd98f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_7bd98f() {
+  bool res = isinf(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isInf_7bd98f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_7bd98f() {
+  bool res = isinf(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..8cc9c15
--- /dev/null
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isInf_7e81b5() {
+  bvec4 res = isinf(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isInf_7e81b5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_7e81b5() {
+  bvec4 res = isinf(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isInf_7e81b5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_7e81b5() {
+  bvec4 res = isinf(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..885f145
--- /dev/null
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isInf_a46d6f() {
+  bvec2 res = isinf(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isInf_a46d6f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_a46d6f() {
+  bvec2 res = isinf(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isInf_a46d6f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isInf_a46d6f() {
+  bvec2 res = isinf(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..dc203d6
--- /dev/null
+++ b/test/intrinsics/gen/isNan/1280ab.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isNan_1280ab() {
+  bvec3 res = isnan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNan_1280ab();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_1280ab() {
+  bvec3 res = isnan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNan_1280ab();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_1280ab() {
+  bvec3 res = isnan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f8b1bb8
--- /dev/null
+++ b/test/intrinsics/gen/isNan/4d280d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isNan_4d280d() {
+  bvec4 res = isnan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNan_4d280d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_4d280d() {
+  bvec4 res = isnan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNan_4d280d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_4d280d() {
+  bvec4 res = isnan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..827aee7
--- /dev/null
+++ b/test/intrinsics/gen/isNan/67ecd3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isNan_67ecd3() {
+  bvec2 res = isnan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNan_67ecd3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_67ecd3() {
+  bvec2 res = isnan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNan_67ecd3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_67ecd3() {
+  bvec2 res = isnan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0b9f0c6
--- /dev/null
+++ b/test/intrinsics/gen/isNan/e4978e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void isNan_e4978e() {
+  bool res = isnan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNan_e4978e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_e4978e() {
+  bool res = isnan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNan_e4978e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void isNan_e4978e() {
+  bool res = isnan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0b2c4b0
--- /dev/null
+++ b/test/intrinsics/gen/isNormal/863dcd.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+bvec4 tint_isNormal(vec4 param_0) {
+  uint4 exponent = asuint(param_0) & 0x7f80000;
+  uint4 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_863dcd() {
+  bvec4 res = tint_isNormal(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNormal_863dcd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bvec4 tint_isNormal(vec4 param_0) {
+  uint4 exponent = asuint(param_0) & 0x7f80000;
+  uint4 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_863dcd() {
+  bvec4 res = tint_isNormal(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNormal_863dcd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bvec4 tint_isNormal(vec4 param_0) {
+  uint4 exponent = asuint(param_0) & 0x7f80000;
+  uint4 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_863dcd() {
+  bvec4 res = tint_isNormal(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  isNormal_863dcd();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
new file mode 100644
index 0000000..31418fa
--- /dev/null
+++ b/test/intrinsics/gen/isNormal/b00ab1.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+bvec2 tint_isNormal(vec2 param_0) {
+  uint2 exponent = asuint(param_0) & 0x7f80000;
+  uint2 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_b00ab1() {
+  bvec2 res = tint_isNormal(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNormal_b00ab1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bvec2 tint_isNormal(vec2 param_0) {
+  uint2 exponent = asuint(param_0) & 0x7f80000;
+  uint2 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_b00ab1() {
+  bvec2 res = tint_isNormal(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNormal_b00ab1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bvec2 tint_isNormal(vec2 param_0) {
+  uint2 exponent = asuint(param_0) & 0x7f80000;
+  uint2 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_b00ab1() {
+  bvec2 res = tint_isNormal(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  isNormal_b00ab1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
new file mode 100644
index 0000000..f631e5d
--- /dev/null
+++ b/test/intrinsics/gen/isNormal/c286b7.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+bvec3 tint_isNormal(vec3 param_0) {
+  uint3 exponent = asuint(param_0) & 0x7f80000;
+  uint3 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_c286b7() {
+  bvec3 res = tint_isNormal(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNormal_c286b7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint3' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bvec3 tint_isNormal(vec3 param_0) {
+  uint3 exponent = asuint(param_0) & 0x7f80000;
+  uint3 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_c286b7() {
+  bvec3 res = tint_isNormal(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  isNormal_c286b7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint3' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bvec3 tint_isNormal(vec3 param_0) {
+  uint3 exponent = asuint(param_0) & 0x7f80000;
+  uint3 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_c286b7() {
+  bvec3 res = tint_isNormal(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  isNormal_c286b7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint3' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
new file mode 100644
index 0000000..972583a
--- /dev/null
+++ b/test/intrinsics/gen/isNormal/c6e880.wgsl.expected.glsl
@@ -0,0 +1,118 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+bool tint_isNormal(float param_0) {
+  uint exponent = asuint(param_0) & 0x7f80000;
+  uint clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_c6e880() {
+  bool res = tint_isNormal(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  isNormal_c6e880();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bool tint_isNormal(float param_0) {
+  uint exponent = asuint(param_0) & 0x7f80000;
+  uint clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_c6e880() {
+  bool res = tint_isNormal(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+bool tint_isNormal(float param_0) {
+  uint exponent = asuint(param_0) & 0x7f80000;
+  uint clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+void isNormal_c6e880() {
+  bool res = tint_isNormal(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
new file mode 100644
index 0000000..6be4130
--- /dev/null
+++ b/test/intrinsics/gen/ldexp/a31cdc.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ldexp_a31cdc() {
+  vec3 res = ldexp(vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ldexp_a31cdc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_a31cdc() {
+  vec3 res = ldexp(vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ldexp_a31cdc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_a31cdc() {
+  vec3 res = ldexp(vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3f863c5
--- /dev/null
+++ b/test/intrinsics/gen/ldexp/abd718.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ldexp_abd718() {
+  vec2 res = ldexp(vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ldexp_abd718();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_abd718() {
+  vec2 res = ldexp(vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ldexp_abd718();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_abd718() {
+  vec2 res = ldexp(vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..fa29694
--- /dev/null
+++ b/test/intrinsics/gen/ldexp/cc9cde.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ldexp_cc9cde() {
+  vec4 res = ldexp(vec4(0.0f, 0.0f, 0.0f, 0.0f), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ldexp_cc9cde();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_cc9cde() {
+  vec4 res = ldexp(vec4(0.0f, 0.0f, 0.0f, 0.0f), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ldexp_cc9cde();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_cc9cde() {
+  vec4 res = ldexp(vec4(0.0f, 0.0f, 0.0f, 0.0f), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9bb389d
--- /dev/null
+++ b/test/intrinsics/gen/ldexp/db8b49.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void ldexp_db8b49() {
+  float res = ldexp(1.0f, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  ldexp_db8b49();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_db8b49() {
+  float res = ldexp(1.0f, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  ldexp_db8b49();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void ldexp_db8b49() {
+  float res = ldexp(1.0f, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..433a775
--- /dev/null
+++ b/test/intrinsics/gen/length/056071.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void length_056071() {
+  float res = length(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  length_056071();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_056071() {
+  float res = length(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  length_056071();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_056071() {
+  float res = length(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a5300f5
--- /dev/null
+++ b/test/intrinsics/gen/length/602a17.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void length_602a17() {
+  float res = length(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  length_602a17();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_602a17() {
+  float res = length(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  length_602a17();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_602a17() {
+  float res = length(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6e7979e
--- /dev/null
+++ b/test/intrinsics/gen/length/afde8b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void length_afde8b() {
+  float res = length(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  length_afde8b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_afde8b() {
+  float res = length(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  length_afde8b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_afde8b() {
+  float res = length(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..8b74be8
--- /dev/null
+++ b/test/intrinsics/gen/length/becebf.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void length_becebf() {
+  float res = length(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  length_becebf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_becebf() {
+  float res = length(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  length_becebf();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void length_becebf() {
+  float res = length(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f312339
--- /dev/null
+++ b/test/intrinsics/gen/log/3da25a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log_3da25a() {
+  vec4 res = log(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log_3da25a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_3da25a() {
+  vec4 res = log(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log_3da25a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_3da25a() {
+  vec4 res = log(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..19b3e42
--- /dev/null
+++ b/test/intrinsics/gen/log/7114a6.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log_7114a6() {
+  float res = log(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log_7114a6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_7114a6() {
+  float res = log(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log_7114a6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_7114a6() {
+  float res = log(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2181f22
--- /dev/null
+++ b/test/intrinsics/gen/log/b2ce28.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log_b2ce28() {
+  vec2 res = log(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log_b2ce28();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_b2ce28() {
+  vec2 res = log(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log_b2ce28();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_b2ce28() {
+  vec2 res = log(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a75bf17
--- /dev/null
+++ b/test/intrinsics/gen/log/f4c570.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log_f4c570() {
+  vec3 res = log(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log_f4c570();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_f4c570() {
+  vec3 res = log(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log_f4c570();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log_f4c570() {
+  vec3 res = log(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e3a12d7
--- /dev/null
+++ b/test/intrinsics/gen/log2/4036ed.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log2_4036ed() {
+  float res = log2(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log2_4036ed();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_4036ed() {
+  float res = log2(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log2_4036ed();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_4036ed() {
+  float res = log2(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f1d25b7
--- /dev/null
+++ b/test/intrinsics/gen/log2/902988.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log2_902988() {
+  vec4 res = log2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log2_902988();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_902988() {
+  vec4 res = log2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log2_902988();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_902988() {
+  vec4 res = log2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2785876
--- /dev/null
+++ b/test/intrinsics/gen/log2/adb233.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log2_adb233() {
+  vec3 res = log2(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log2_adb233();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_adb233() {
+  vec3 res = log2(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log2_adb233();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_adb233() {
+  vec3 res = log2(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..105fc9e
--- /dev/null
+++ b/test/intrinsics/gen/log2/aea659.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void log2_aea659() {
+  vec2 res = log2(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  log2_aea659();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_aea659() {
+  vec2 res = log2(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  log2_aea659();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void log2_aea659() {
+  vec2 res = log2(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6462db5
--- /dev/null
+++ b/test/intrinsics/gen/max/0c0aae.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_0c0aae() {
+  uint res = max(1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_0c0aae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_0c0aae() {
+  uint res = max(1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_0c0aae();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_0c0aae() {
+  uint res = max(1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..81b1a2c
--- /dev/null
+++ b/test/intrinsics/gen/max/25eafe.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_25eafe() {
+  ivec3 res = max(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_25eafe();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_25eafe() {
+  ivec3 res = max(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_25eafe();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_25eafe() {
+  ivec3 res = max(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..33a176b
--- /dev/null
+++ b/test/intrinsics/gen/max/320815.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_320815() {
+  uvec2 res = max(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_320815();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_320815() {
+  uvec2 res = max(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_320815();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_320815() {
+  uvec2 res = max(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e0a701f
--- /dev/null
+++ b/test/intrinsics/gen/max/44a39d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_44a39d() {
+  float res = max(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_44a39d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_44a39d() {
+  float res = max(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_44a39d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_44a39d() {
+  float res = max(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f9ec53e
--- /dev/null
+++ b/test/intrinsics/gen/max/453e04.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_453e04() {
+  uvec4 res = max(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_453e04();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_453e04() {
+  uvec4 res = max(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_453e04();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_453e04() {
+  uvec4 res = max(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..038fa12
--- /dev/null
+++ b/test/intrinsics/gen/max/462050.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_462050() {
+  vec2 res = max(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_462050();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_462050() {
+  vec2 res = max(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_462050();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_462050() {
+  vec2 res = max(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..60b9131
--- /dev/null
+++ b/test/intrinsics/gen/max/4883ac.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_4883ac() {
+  vec3 res = max(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_4883ac();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_4883ac() {
+  vec3 res = max(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_4883ac();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_4883ac() {
+  vec3 res = max(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..14fb911
--- /dev/null
+++ b/test/intrinsics/gen/max/85e6bc.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_85e6bc() {
+  ivec4 res = max(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_85e6bc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_85e6bc() {
+  ivec4 res = max(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_85e6bc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_85e6bc() {
+  ivec4 res = max(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d988e4f
--- /dev/null
+++ b/test/intrinsics/gen/max/a93419.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_a93419() {
+  vec4 res = max(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_a93419();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_a93419() {
+  vec4 res = max(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_a93419();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_a93419() {
+  vec4 res = max(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..5ac1a04
--- /dev/null
+++ b/test/intrinsics/gen/max/b1b73a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_b1b73a() {
+  uvec3 res = max(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_b1b73a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_b1b73a() {
+  uvec3 res = max(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_b1b73a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_b1b73a() {
+  uvec3 res = max(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..78a41e4
--- /dev/null
+++ b/test/intrinsics/gen/max/ce7c30.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_ce7c30() {
+  int res = max(1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_ce7c30();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_ce7c30() {
+  int res = max(1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_ce7c30();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_ce7c30() {
+  int res = max(1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0df9fe1
--- /dev/null
+++ b/test/intrinsics/gen/max/e8192f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void max_e8192f() {
+  ivec2 res = max(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  max_e8192f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_e8192f() {
+  ivec2 res = max(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  max_e8192f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void max_e8192f() {
+  ivec2 res = max(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3681cac
--- /dev/null
+++ b/test/intrinsics/gen/min/03c7e3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_03c7e3() {
+  ivec2 res = min(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_03c7e3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_03c7e3() {
+  ivec2 res = min(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_03c7e3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_03c7e3() {
+  ivec2 res = min(ivec2(0, 0), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..5f46503
--- /dev/null
+++ b/test/intrinsics/gen/min/0dc614.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_0dc614() {
+  uvec4 res = min(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_0dc614();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_0dc614() {
+  uvec4 res = min(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_0dc614();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_0dc614() {
+  uvec4 res = min(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4b50155
--- /dev/null
+++ b/test/intrinsics/gen/min/3941e1.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_3941e1() {
+  ivec4 res = min(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_3941e1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_3941e1() {
+  ivec4 res = min(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_3941e1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_3941e1() {
+  ivec4 res = min(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6a12575
--- /dev/null
+++ b/test/intrinsics/gen/min/46c5d3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_46c5d3() {
+  uint res = min(1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_46c5d3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_46c5d3() {
+  uint res = min(1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_46c5d3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_46c5d3() {
+  uint res = min(1u, 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ccc288d
--- /dev/null
+++ b/test/intrinsics/gen/min/82b28f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_82b28f() {
+  uvec2 res = min(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_82b28f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_82b28f() {
+  uvec2 res = min(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_82b28f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_82b28f() {
+  uvec2 res = min(uvec2(0u, 0u), uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6c8ed16
--- /dev/null
+++ b/test/intrinsics/gen/min/93cfc4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_93cfc4() {
+  vec3 res = min(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_93cfc4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_93cfc4() {
+  vec3 res = min(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_93cfc4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_93cfc4() {
+  vec3 res = min(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..be1e651
--- /dev/null
+++ b/test/intrinsics/gen/min/a45171.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_a45171() {
+  ivec3 res = min(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_a45171();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_a45171() {
+  ivec3 res = min(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_a45171();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_a45171() {
+  ivec3 res = min(ivec3(0, 0, 0), ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e278388
--- /dev/null
+++ b/test/intrinsics/gen/min/aa28ad.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_aa28ad() {
+  vec2 res = min(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_aa28ad();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_aa28ad() {
+  vec2 res = min(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_aa28ad();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_aa28ad() {
+  vec2 res = min(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..fb6c905
--- /dev/null
+++ b/test/intrinsics/gen/min/af326d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_af326d() {
+  float res = min(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_af326d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_af326d() {
+  float res = min(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_af326d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_af326d() {
+  float res = min(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1497821
--- /dev/null
+++ b/test/intrinsics/gen/min/c70bb7.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_c70bb7() {
+  uvec3 res = min(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_c70bb7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_c70bb7() {
+  uvec3 res = min(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_c70bb7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_c70bb7() {
+  uvec3 res = min(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..33890b6
--- /dev/null
+++ b/test/intrinsics/gen/min/c73147.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_c73147() {
+  int res = min(1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_c73147();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_c73147() {
+  int res = min(1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_c73147();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_c73147() {
+  int res = min(1, 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d592973
--- /dev/null
+++ b/test/intrinsics/gen/min/c76fa6.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void min_c76fa6() {
+  vec4 res = min(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  min_c76fa6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_c76fa6() {
+  vec4 res = min(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  min_c76fa6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void min_c76fa6() {
+  vec4 res = min(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..7655fec
--- /dev/null
+++ b/test/intrinsics/gen/mix/0c8c33.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_0c8c33() {
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_0c8c33();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_0c8c33() {
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_0c8c33();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_0c8c33() {
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..53f8f7e
--- /dev/null
+++ b/test/intrinsics/gen/mix/1faeb1.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_1faeb1() {
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_1faeb1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_1faeb1() {
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_1faeb1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_1faeb1() {
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a51405d
--- /dev/null
+++ b/test/intrinsics/gen/mix/2fadab.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_2fadab() {
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_2fadab();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_2fadab() {
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_2fadab();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_2fadab() {
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..fcfcee9
--- /dev/null
+++ b/test/intrinsics/gen/mix/315264.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_315264() {
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_315264();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_315264() {
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_315264();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_315264() {
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9aadb86
--- /dev/null
+++ b/test/intrinsics/gen/mix/4f0b5e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_4f0b5e() {
+  float res = mix(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_4f0b5e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_4f0b5e() {
+  float res = mix(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_4f0b5e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_4f0b5e() {
+  float res = mix(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a0f4d63
--- /dev/null
+++ b/test/intrinsics/gen/mix/6f8adc.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_6f8adc() {
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_6f8adc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_6f8adc() {
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_6f8adc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_6f8adc() {
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..440a8d8
--- /dev/null
+++ b/test/intrinsics/gen/mix/c37ede.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void mix_c37ede() {
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  mix_c37ede();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_c37ede() {
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  mix_c37ede();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void mix_c37ede() {
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  mix_c37ede();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/gen/modf/2199f1.wgsl.expected.glsl b/test/intrinsics/gen/modf/2199f1.wgsl.expected.glsl
new file mode 100644
index 0000000..8b170ac
--- /dev/null
+++ b/test/intrinsics/gen/modf/2199f1.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec3 {
+  vec3 fract;
+  vec3 whole;
+};
+modf_result_vec3 tint_modf(vec3 param_0) {
+  float3 whole;
+  float3 fract = modf(param_0, whole);
+  modf_result_vec3 result = {fract, whole};
+  return result;
+}
+
+
+void modf_2199f1() {
+  modf_result_vec3 res = tint_modf(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  modf_2199f1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float3' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec3 {
+  vec3 fract;
+  vec3 whole;
+};
+modf_result_vec3 tint_modf(vec3 param_0) {
+  float3 whole;
+  float3 fract = modf(param_0, whole);
+  modf_result_vec3 result = {fract, whole};
+  return result;
+}
+
+
+void modf_2199f1() {
+  modf_result_vec3 res = tint_modf(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  modf_2199f1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float3' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec3 {
+  vec3 fract;
+  vec3 whole;
+};
+modf_result_vec3 tint_modf(vec3 param_0) {
+  float3 whole;
+  float3 fract = modf(param_0, whole);
+  modf_result_vec3 result = {fract, whole};
+  return result;
+}
+
+
+void modf_2199f1() {
+  modf_result_vec3 res = tint_modf(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  modf_2199f1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float3' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/modf/684d46.wgsl.expected.glsl b/test/intrinsics/gen/modf/684d46.wgsl.expected.glsl
new file mode 100644
index 0000000..1bdfd4f
--- /dev/null
+++ b/test/intrinsics/gen/modf/684d46.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct modf_result {
+  float fract;
+  float whole;
+};
+modf_result tint_modf(float param_0) {
+  float whole;
+  float fract = modf(param_0, whole);
+  modf_result result = {fract, whole};
+  return result;
+}
+
+
+void modf_684d46() {
+  modf_result res = tint_modf(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  modf_684d46();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result {
+  float fract;
+  float whole;
+};
+modf_result tint_modf(float param_0) {
+  float whole;
+  float fract = modf(param_0, whole);
+  modf_result result = {fract, whole};
+  return result;
+}
+
+
+void modf_684d46() {
+  modf_result res = tint_modf(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  modf_684d46();
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result {
+  float fract;
+  float whole;
+};
+modf_result tint_modf(float param_0) {
+  float whole;
+  float fract = modf(param_0, whole);
+  modf_result result = {fract, whole};
+  return result;
+}
+
+
+void modf_684d46() {
+  modf_result res = tint_modf(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  modf_684d46();
+  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: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/modf/9b44a9.wgsl.expected.glsl b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.glsl
new file mode 100644
index 0000000..b4bfa59
--- /dev/null
+++ b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec4 {
+  vec4 fract;
+  vec4 whole;
+};
+modf_result_vec4 tint_modf(vec4 param_0) {
+  float4 whole;
+  float4 fract = modf(param_0, whole);
+  modf_result_vec4 result = {fract, whole};
+  return result;
+}
+
+
+void modf_9b44a9() {
+  modf_result_vec4 res = tint_modf(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  modf_9b44a9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float4' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec4 {
+  vec4 fract;
+  vec4 whole;
+};
+modf_result_vec4 tint_modf(vec4 param_0) {
+  float4 whole;
+  float4 fract = modf(param_0, whole);
+  modf_result_vec4 result = {fract, whole};
+  return result;
+}
+
+
+void modf_9b44a9() {
+  modf_result_vec4 res = tint_modf(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  modf_9b44a9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float4' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec4 {
+  vec4 fract;
+  vec4 whole;
+};
+modf_result_vec4 tint_modf(vec4 param_0) {
+  float4 whole;
+  float4 fract = modf(param_0, whole);
+  modf_result_vec4 result = {fract, whole};
+  return result;
+}
+
+
+void modf_9b44a9() {
+  modf_result_vec4 res = tint_modf(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  modf_9b44a9();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float4' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/modf/c87851.wgsl.expected.glsl b/test/intrinsics/gen/modf/c87851.wgsl.expected.glsl
new file mode 100644
index 0000000..7ac2097
--- /dev/null
+++ b/test/intrinsics/gen/modf/c87851.wgsl.expected.glsl
@@ -0,0 +1,130 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec2 {
+  vec2 fract;
+  vec2 whole;
+};
+modf_result_vec2 tint_modf(vec2 param_0) {
+  float2 whole;
+  float2 fract = modf(param_0, whole);
+  modf_result_vec2 result = {fract, whole};
+  return result;
+}
+
+
+void modf_c87851() {
+  modf_result_vec2 res = tint_modf(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  modf_c87851();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float2' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec2 {
+  vec2 fract;
+  vec2 whole;
+};
+modf_result_vec2 tint_modf(vec2 param_0) {
+  float2 whole;
+  float2 fract = modf(param_0, whole);
+  modf_result_vec2 result = {fract, whole};
+  return result;
+}
+
+
+void modf_c87851() {
+  modf_result_vec2 res = tint_modf(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  modf_c87851();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float2' : undeclared identifier 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+struct modf_result_vec2 {
+  vec2 fract;
+  vec2 whole;
+};
+modf_result_vec2 tint_modf(vec2 param_0) {
+  float2 whole;
+  float2 fract = modf(param_0, whole);
+  modf_result_vec2 result = {fract, whole};
+  return result;
+}
+
+
+void modf_c87851() {
+  modf_result_vec2 res = tint_modf(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  modf_c87851();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'float2' : undeclared identifier 
+ERROR: 0:9: '' : 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
new file mode 100644
index 0000000..39ea34c
--- /dev/null
+++ b/test/intrinsics/gen/normalize/64d8c0.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void normalize_64d8c0() {
+  vec3 res = normalize(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  normalize_64d8c0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void normalize_64d8c0() {
+  vec3 res = normalize(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  normalize_64d8c0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void normalize_64d8c0() {
+  vec3 res = normalize(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..717b70b
--- /dev/null
+++ b/test/intrinsics/gen/normalize/9a0aab.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void normalize_9a0aab() {
+  vec4 res = normalize(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  normalize_9a0aab();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void normalize_9a0aab() {
+  vec4 res = normalize(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  normalize_9a0aab();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void normalize_9a0aab() {
+  vec4 res = normalize(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..7159f7f
--- /dev/null
+++ b/test/intrinsics/gen/normalize/fc2ef1.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void normalize_fc2ef1() {
+  vec2 res = normalize(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  normalize_fc2ef1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void normalize_fc2ef1() {
+  vec2 res = normalize(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  normalize_fc2ef1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void normalize_fc2ef1() {
+  vec2 res = normalize(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..b34c723
--- /dev/null
+++ b/test/intrinsics/gen/pack2x16float/0e97b3.wgsl.expected.glsl
@@ -0,0 +1,112 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16float(vec2 param_0) {
+  uint2 i = f32tof16(param_0);
+  return i.x | (i.y << 16);
+}
+
+
+void pack2x16float_0e97b3() {
+  uint res = tint_pack2x16float(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pack2x16float_0e97b3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16float(vec2 param_0) {
+  uint2 i = f32tof16(param_0);
+  return i.x | (i.y << 16);
+}
+
+
+void pack2x16float_0e97b3() {
+  uint res = tint_pack2x16float(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pack2x16float_0e97b3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16float(vec2 param_0) {
+  uint2 i = f32tof16(param_0);
+  return i.x | (i.y << 16);
+}
+
+
+void pack2x16float_0e97b3() {
+  uint res = tint_pack2x16float(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  pack2x16float_0e97b3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
new file mode 100644
index 0000000..dbc5baa
--- /dev/null
+++ b/test/intrinsics/gen/pack2x16snorm/6c169b.wgsl.expected.glsl
@@ -0,0 +1,112 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16snorm(vec2 param_0) {
+  int2 i = int2(round(clamp(param_0, -1.0, 1.0) * 32767.0)) & 0xffff;
+  return asuint(i.x | i.y << 16);
+}
+
+
+void pack2x16snorm_6c169b() {
+  uint res = tint_pack2x16snorm(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pack2x16snorm_6c169b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'int2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16snorm(vec2 param_0) {
+  int2 i = int2(round(clamp(param_0, -1.0, 1.0) * 32767.0)) & 0xffff;
+  return asuint(i.x | i.y << 16);
+}
+
+
+void pack2x16snorm_6c169b() {
+  uint res = tint_pack2x16snorm(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pack2x16snorm_6c169b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'int2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16snorm(vec2 param_0) {
+  int2 i = int2(round(clamp(param_0, -1.0, 1.0) * 32767.0)) & 0xffff;
+  return asuint(i.x | i.y << 16);
+}
+
+
+void pack2x16snorm_6c169b() {
+  uint res = tint_pack2x16snorm(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  pack2x16snorm_6c169b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'int2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
new file mode 100644
index 0000000..957c998
--- /dev/null
+++ b/test/intrinsics/gen/pack2x16unorm/0f08e4.wgsl.expected.glsl
@@ -0,0 +1,112 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16unorm(vec2 param_0) {
+  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
+  return (i.x | i.y << 16);
+}
+
+
+void pack2x16unorm_0f08e4() {
+  uint res = tint_pack2x16unorm(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pack2x16unorm_0f08e4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16unorm(vec2 param_0) {
+  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
+  return (i.x | i.y << 16);
+}
+
+
+void pack2x16unorm_0f08e4() {
+  uint res = tint_pack2x16unorm(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pack2x16unorm_0f08e4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack2x16unorm(vec2 param_0) {
+  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
+  return (i.x | i.y << 16);
+}
+
+
+void pack2x16unorm_0f08e4() {
+  uint res = tint_pack2x16unorm(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  pack2x16unorm_0f08e4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint2' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
new file mode 100644
index 0000000..665b0da
--- /dev/null
+++ b/test/intrinsics/gen/pack4x8snorm/4d22e7.wgsl.expected.glsl
@@ -0,0 +1,112 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack4x8snorm(vec4 param_0) {
+  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
+  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
+}
+
+
+void pack4x8snorm_4d22e7() {
+  uint res = tint_pack4x8snorm(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pack4x8snorm_4d22e7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'int4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack4x8snorm(vec4 param_0) {
+  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
+  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
+}
+
+
+void pack4x8snorm_4d22e7() {
+  uint res = tint_pack4x8snorm(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pack4x8snorm_4d22e7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'int4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack4x8snorm(vec4 param_0) {
+  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
+  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
+}
+
+
+void pack4x8snorm_4d22e7() {
+  uint res = tint_pack4x8snorm(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  pack4x8snorm_4d22e7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'int4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
new file mode 100644
index 0000000..e2bb77f
--- /dev/null
+++ b/test/intrinsics/gen/pack4x8unorm/95c456.wgsl.expected.glsl
@@ -0,0 +1,112 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack4x8unorm(vec4 param_0) {
+  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
+  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
+}
+
+
+void pack4x8unorm_95c456() {
+  uint res = tint_pack4x8unorm(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pack4x8unorm_95c456();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack4x8unorm(vec4 param_0) {
+  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
+  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
+}
+
+
+void pack4x8unorm_95c456() {
+  uint res = tint_pack4x8unorm(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pack4x8unorm_95c456();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uint tint_pack4x8unorm(vec4 param_0) {
+  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
+  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
+}
+
+
+void pack4x8unorm_95c456() {
+  uint res = tint_pack4x8unorm(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  pack4x8unorm_95c456();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl b/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
new file mode 100644
index 0000000..c50c6af
--- /dev/null
+++ b/test/intrinsics/gen/pow/04a908.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void pow_04a908() {
+  vec4 res = pow(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pow_04a908();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_04a908() {
+  vec4 res = pow(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pow_04a908();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_04a908() {
+  vec4 res = pow(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f8745f4
--- /dev/null
+++ b/test/intrinsics/gen/pow/46e029.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void pow_46e029() {
+  float res = pow(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pow_46e029();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_46e029() {
+  float res = pow(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pow_46e029();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_46e029() {
+  float res = pow(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..5d76a94
--- /dev/null
+++ b/test/intrinsics/gen/pow/4a46c9.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void pow_4a46c9() {
+  vec3 res = pow(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pow_4a46c9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_4a46c9() {
+  vec3 res = pow(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pow_4a46c9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_4a46c9() {
+  vec3 res = pow(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..5e2fb98
--- /dev/null
+++ b/test/intrinsics/gen/pow/e60ea5.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void pow_e60ea5() {
+  vec2 res = pow(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  pow_e60ea5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_e60ea5() {
+  vec2 res = pow(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  pow_e60ea5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void pow_e60ea5() {
+  vec2 res = pow(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  pow_e60ea5();
+  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
new file mode 100644
index 0000000..50be510
--- /dev/null
+++ b/test/intrinsics/gen/reflect/05357e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void reflect_05357e() {
+  vec4 res = reflect(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reflect_05357e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void reflect_05357e() {
+  vec4 res = reflect(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  reflect_05357e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void reflect_05357e() {
+  vec4 res = reflect(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..91aec93
--- /dev/null
+++ b/test/intrinsics/gen/reflect/b61e10.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void reflect_b61e10() {
+  vec2 res = reflect(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reflect_b61e10();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void reflect_b61e10() {
+  vec2 res = reflect(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  reflect_b61e10();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void reflect_b61e10() {
+  vec2 res = reflect(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a9cdf93
--- /dev/null
+++ b/test/intrinsics/gen/reflect/f47fdb.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void reflect_f47fdb() {
+  vec3 res = reflect(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reflect_f47fdb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void reflect_f47fdb() {
+  vec3 res = reflect(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  reflect_f47fdb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void reflect_f47fdb() {
+  vec3 res = reflect(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e60675e
--- /dev/null
+++ b/test/intrinsics/gen/refract/7e02e6.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void refract_7e02e6() {
+  vec4 res = refract(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  refract_7e02e6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void refract_7e02e6() {
+  vec4 res = refract(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  refract_7e02e6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void refract_7e02e6() {
+  vec4 res = refract(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2561c52
--- /dev/null
+++ b/test/intrinsics/gen/refract/cbc1d2.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void refract_cbc1d2() {
+  vec3 res = refract(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  refract_cbc1d2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void refract_cbc1d2() {
+  vec3 res = refract(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  refract_cbc1d2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void refract_cbc1d2() {
+  vec3 res = refract(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..01765ce
--- /dev/null
+++ b/test/intrinsics/gen/refract/cd905f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void refract_cd905f() {
+  vec2 res = refract(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  refract_cd905f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void refract_cd905f() {
+  vec2 res = refract(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  refract_cd905f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void refract_cd905f() {
+  vec2 res = refract(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d62daf3
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/222177.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_222177() {
+  ivec2 res = reversebits(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_222177();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_222177() {
+  ivec2 res = reversebits(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_222177() {
+  ivec2 res = reversebits(ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
new file mode 100644
index 0000000..4beb522
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/35fea9.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_35fea9() {
+  uvec4 res = reversebits(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_35fea9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_35fea9() {
+  uvec4 res = reversebits(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_35fea9() {
+  uvec4 res = reversebits(uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
new file mode 100644
index 0000000..85ac5da
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/4dbd6f.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_4dbd6f() {
+  ivec4 res = reversebits(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_4dbd6f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_4dbd6f() {
+  ivec4 res = reversebits(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_4dbd6f() {
+  ivec4 res = reversebits(ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
new file mode 100644
index 0000000..7109502
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/7c4269.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_7c4269() {
+  int res = reversebits(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_7c4269();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_7c4269() {
+  int res = reversebits(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_7c4269() {
+  int res = reversebits(1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
new file mode 100644
index 0000000..67c7af8
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/a6ccd4.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_a6ccd4() {
+  uvec3 res = reversebits(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_a6ccd4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_a6ccd4() {
+  uvec3 res = reversebits(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_a6ccd4() {
+  uvec3 res = reversebits(uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
new file mode 100644
index 0000000..a25b4a4
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/c21bc1.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_c21bc1() {
+  ivec3 res = reversebits(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_c21bc1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_c21bc1() {
+  ivec3 res = reversebits(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_c21bc1() {
+  ivec3 res = reversebits(ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
new file mode 100644
index 0000000..e314fbb
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/e1f4c1.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_e1f4c1() {
+  uvec2 res = reversebits(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_e1f4c1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_e1f4c1() {
+  uvec2 res = reversebits(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_e1f4c1() {
+  uvec2 res = reversebits(uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
new file mode 100644
index 0000000..35ab11c
--- /dev/null
+++ b/test/intrinsics/gen/reverseBits/e31adf.wgsl.expected.glsl
@@ -0,0 +1,97 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_e31adf() {
+  uint res = reversebits(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  reverseBits_e31adf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_e31adf() {
+  uint res = reversebits(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void reverseBits_e31adf() {
+  uint res = reversebits(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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'
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl b/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
new file mode 100644
index 0000000..bd1e3cc
--- /dev/null
+++ b/test/intrinsics/gen/round/106c0b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void round_106c0b() {
+  vec4 res = round(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  round_106c0b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_106c0b() {
+  vec4 res = round(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  round_106c0b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_106c0b() {
+  vec4 res = round(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..28eb74c
--- /dev/null
+++ b/test/intrinsics/gen/round/1c7897.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void round_1c7897() {
+  vec3 res = round(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  round_1c7897();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_1c7897() {
+  vec3 res = round(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  round_1c7897();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_1c7897() {
+  vec3 res = round(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d9b15b5
--- /dev/null
+++ b/test/intrinsics/gen/round/52c84d.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void round_52c84d() {
+  vec2 res = round(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  round_52c84d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_52c84d() {
+  vec2 res = round(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  round_52c84d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_52c84d() {
+  vec2 res = round(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..df807da
--- /dev/null
+++ b/test/intrinsics/gen/round/9edc38.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void round_9edc38() {
+  float res = round(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  round_9edc38();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_9edc38() {
+  float res = round(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  round_9edc38();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void round_9edc38() {
+  float res = round(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..347a0b7
--- /dev/null
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_00b848() {
+  ivec2 res = (bvec2(false, false) ? ivec2(0, 0) : ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_00b848();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_00b848() {
+  ivec2 res = (bvec2(false, false) ? ivec2(0, 0) : ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_00b848();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_00b848() {
+  ivec2 res = (bvec2(false, false) ? ivec2(0, 0) : ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_00b848();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
new file mode 100644
index 0000000..f31d541
--- /dev/null
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_01e2cd() {
+  ivec3 res = (bvec3(false, false, false) ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_01e2cd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_01e2cd() {
+  ivec3 res = (bvec3(false, false, false) ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_01e2cd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_01e2cd() {
+  ivec3 res = (bvec3(false, false, false) ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_01e2cd();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl b/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
new file mode 100644
index 0000000..0179924
--- /dev/null
+++ b/test/intrinsics/gen/select/087ea4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_087ea4() {
+  uvec4 res = (false ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_087ea4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_087ea4() {
+  uvec4 res = (false ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_087ea4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_087ea4() {
+  uvec4 res = (false ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..00238d3
--- /dev/null
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_1e960b() {
+  uvec2 res = (bvec2(false, false) ? uvec2(0u, 0u) : uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_1e960b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_1e960b() {
+  uvec2 res = (bvec2(false, false) ? uvec2(0u, 0u) : uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_1e960b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_1e960b() {
+  uvec2 res = (bvec2(false, false) ? uvec2(0u, 0u) : uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_1e960b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.glsl b/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
new file mode 100644
index 0000000..fce4b89
--- /dev/null
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_266aff() {
+  vec2 res = (bvec2(false, false) ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_266aff();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_266aff() {
+  vec2 res = (bvec2(false, false) ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_266aff();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_266aff() {
+  vec2 res = (bvec2(false, false) ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_266aff();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl b/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
new file mode 100644
index 0000000..09ac5f0
--- /dev/null
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_28a27e() {
+  uvec3 res = (bvec3(false, false, false) ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_28a27e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_28a27e() {
+  uvec3 res = (bvec3(false, false, false) ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_28a27e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_28a27e() {
+  uvec3 res = (bvec3(false, false, false) ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_28a27e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl b/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
new file mode 100644
index 0000000..c1be4f7
--- /dev/null
+++ b/test/intrinsics/gen/select/3c25ce.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_3c25ce() {
+  bvec3 res = (false ? bvec3(false, false, false) : bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_3c25ce();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_3c25ce() {
+  bvec3 res = (false ? bvec3(false, false, false) : bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_3c25ce();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_3c25ce() {
+  bvec3 res = (false ? bvec3(false, false, false) : bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e1fdb29
--- /dev/null
+++ b/test/intrinsics/gen/select/416e14.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_416e14() {
+  float res = (false ? 1.0f : 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_416e14();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_416e14() {
+  float res = (false ? 1.0f : 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_416e14();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_416e14() {
+  float res = (false ? 1.0f : 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3004e29
--- /dev/null
+++ b/test/intrinsics/gen/select/51b047.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_51b047() {
+  uvec2 res = (false ? uvec2(0u, 0u) : uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_51b047();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_51b047() {
+  uvec2 res = (false ? uvec2(0u, 0u) : uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_51b047();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_51b047() {
+  uvec2 res = (false ? uvec2(0u, 0u) : uvec2(0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2d7eb6d
--- /dev/null
+++ b/test/intrinsics/gen/select/713567.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_713567() {
+  vec4 res = (false ? vec4(0.0f, 0.0f, 0.0f, 0.0f) : vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_713567();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_713567() {
+  vec4 res = (false ? vec4(0.0f, 0.0f, 0.0f, 0.0f) : vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_713567();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_713567() {
+  vec4 res = (false ? vec4(0.0f, 0.0f, 0.0f, 0.0f) : vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..df6fbf4
--- /dev/null
+++ b/test/intrinsics/gen/select/78be5f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_78be5f() {
+  vec3 res = (false ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_78be5f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_78be5f() {
+  vec3 res = (false ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_78be5f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_78be5f() {
+  vec3 res = (false ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9c5e012
--- /dev/null
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_80a9a9() {
+  bvec3 res = (bvec3(false, false, false) ? bvec3(false, false, false) : bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_80a9a9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_80a9a9() {
+  bvec3 res = (bvec3(false, false, false) ? bvec3(false, false, false) : bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_80a9a9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_80a9a9() {
+  bvec3 res = (bvec3(false, false, false) ? bvec3(false, false, false) : bvec3(false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_80a9a9();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl b/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
new file mode 100644
index 0000000..1821b3a
--- /dev/null
+++ b/test/intrinsics/gen/select/8fa62c.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_8fa62c() {
+  ivec3 res = (false ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_8fa62c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_8fa62c() {
+  ivec3 res = (false ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_8fa62c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_8fa62c() {
+  ivec3 res = (false ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..8125ab2
--- /dev/null
+++ b/test/intrinsics/gen/select/99f883.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_99f883() {
+  uint res = (false ? 1u : 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_99f883();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_99f883() {
+  uint res = (false ? 1u : 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_99f883();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_99f883() {
+  uint res = (false ? 1u : 1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..52b9848
--- /dev/null
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_a2860e() {
+  ivec4 res = (bvec4(false, false, false, false) ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_a2860e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_a2860e() {
+  ivec4 res = (bvec4(false, false, false, false) ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_a2860e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_a2860e() {
+  ivec4 res = (bvec4(false, false, false, false) ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_a2860e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl b/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
new file mode 100644
index 0000000..6e3aa0e
--- /dev/null
+++ b/test/intrinsics/gen/select/ab069f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_ab069f() {
+  ivec4 res = (false ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_ab069f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_ab069f() {
+  ivec4 res = (false ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_ab069f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_ab069f() {
+  ivec4 res = (false ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6d577be
--- /dev/null
+++ b/test/intrinsics/gen/select/b04721.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_b04721() {
+  uvec3 res = (false ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_b04721();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_b04721() {
+  uvec3 res = (false ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_b04721();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_b04721() {
+  uvec3 res = (false ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..c8d1747
--- /dev/null
+++ b/test/intrinsics/gen/select/bb447f.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_bb447f() {
+  ivec2 res = (false ? ivec2(0, 0) : ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_bb447f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_bb447f() {
+  ivec2 res = (false ? ivec2(0, 0) : ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_bb447f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_bb447f() {
+  ivec2 res = (false ? ivec2(0, 0) : ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1723d39
--- /dev/null
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_bb8aae() {
+  vec4 res = (bvec4(false, false, false, false) ? vec4(0.0f, 0.0f, 0.0f, 0.0f) : vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_bb8aae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_bb8aae() {
+  vec4 res = (bvec4(false, false, false, false) ? vec4(0.0f, 0.0f, 0.0f, 0.0f) : vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_bb8aae();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_bb8aae() {
+  vec4 res = (bvec4(false, false, false, false) ? vec4(0.0f, 0.0f, 0.0f, 0.0f) : vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_bb8aae();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl b/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
new file mode 100644
index 0000000..5d30a5d
--- /dev/null
+++ b/test/intrinsics/gen/select/bf3d29.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_bf3d29() {
+  vec2 res = (false ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_bf3d29();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_bf3d29() {
+  vec2 res = (false ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_bf3d29();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_bf3d29() {
+  vec2 res = (false ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..b95f6ab
--- /dev/null
+++ b/test/intrinsics/gen/select/c31f9e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_c31f9e() {
+  bool res = (false ? false : false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_c31f9e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_c31f9e() {
+  bool res = (false ? false : false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_c31f9e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_c31f9e() {
+  bool res = (false ? false : false);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1275c19
--- /dev/null
+++ b/test/intrinsics/gen/select/c41bd1.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_c41bd1() {
+  bvec4 res = (false ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_c41bd1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_c41bd1() {
+  bvec4 res = (false ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_c41bd1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_c41bd1() {
+  bvec4 res = (false ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..926264c
--- /dev/null
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_c4a4ef() {
+  uvec4 res = (bvec4(false, false, false, false) ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_c4a4ef();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_c4a4ef() {
+  uvec4 res = (bvec4(false, false, false, false) ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_c4a4ef();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_c4a4ef() {
+  uvec4 res = (bvec4(false, false, false, false) ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_c4a4ef();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl b/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
new file mode 100644
index 0000000..2149581
--- /dev/null
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_cb9301() {
+  bvec2 res = (bvec2(false, false) ? bvec2(false, false) : bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_cb9301();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_cb9301() {
+  bvec2 res = (bvec2(false, false) ? bvec2(false, false) : bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_cb9301();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_cb9301() {
+  bvec2 res = (bvec2(false, false) ? bvec2(false, false) : bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_cb9301();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl b/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
new file mode 100644
index 0000000..9a62a71
--- /dev/null
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_e3e028() {
+  bvec4 res = (bvec4(false, false, false, false) ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_e3e028();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_e3e028() {
+  bvec4 res = (bvec4(false, false, false, false) ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_e3e028();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_e3e028() {
+  bvec4 res = (bvec4(false, false, false, false) ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_e3e028();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
new file mode 100644
index 0000000..3843641
--- /dev/null
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.glsl
@@ -0,0 +1,94 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void select_ebfea2() {
+  vec3 res = (bvec3(false, false, false) ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_ebfea2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_ebfea2() {
+  vec3 res = (bvec3(false, false, false) ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_ebfea2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void select_ebfea2() {
+  vec3 res = (bvec3(false, false, false) ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  select_ebfea2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '' : boolean expression expected 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl b/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
new file mode 100644
index 0000000..1145b1e
--- /dev/null
+++ b/test/intrinsics/gen/select/ed8a15.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_ed8a15() {
+  int res = (false ? 1 : 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_ed8a15();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_ed8a15() {
+  int res = (false ? 1 : 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_ed8a15();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_ed8a15() {
+  int res = (false ? 1 : 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4fcd1db
--- /dev/null
+++ b/test/intrinsics/gen/select/fb7e53.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void select_fb7e53() {
+  bvec2 res = (false ? bvec2(false, false) : bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  select_fb7e53();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_fb7e53() {
+  bvec2 res = (false ? bvec2(false, false) : bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  select_fb7e53();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void select_fb7e53() {
+  bvec2 res = (false ? bvec2(false, false) : bvec2(false, false));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a226002
--- /dev/null
+++ b/test/intrinsics/gen/sign/159665.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sign_159665() {
+  vec3 res = sign(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sign_159665();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_159665() {
+  vec3 res = sign(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sign_159665();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_159665() {
+  vec3 res = sign(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a2b8a3c
--- /dev/null
+++ b/test/intrinsics/gen/sign/b8f634.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sign_b8f634() {
+  vec4 res = sign(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sign_b8f634();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_b8f634() {
+  vec4 res = sign(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sign_b8f634();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_b8f634() {
+  vec4 res = sign(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2085558
--- /dev/null
+++ b/test/intrinsics/gen/sign/d065d8.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sign_d065d8() {
+  vec2 res = sign(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sign_d065d8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_d065d8() {
+  vec2 res = sign(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sign_d065d8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_d065d8() {
+  vec2 res = sign(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..9a999ef
--- /dev/null
+++ b/test/intrinsics/gen/sign/dd790e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sign_dd790e() {
+  float res = sign(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sign_dd790e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_dd790e() {
+  float res = sign(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sign_dd790e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sign_dd790e() {
+  float res = sign(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0ab76db
--- /dev/null
+++ b/test/intrinsics/gen/sin/01f241.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sin_01f241() {
+  vec3 res = sin(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sin_01f241();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_01f241() {
+  vec3 res = sin(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sin_01f241();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_01f241() {
+  vec3 res = sin(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..0f3d911
--- /dev/null
+++ b/test/intrinsics/gen/sin/4e3979.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sin_4e3979() {
+  vec4 res = sin(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sin_4e3979();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_4e3979() {
+  vec4 res = sin(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sin_4e3979();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_4e3979() {
+  vec4 res = sin(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2b77b75
--- /dev/null
+++ b/test/intrinsics/gen/sin/b78c91.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sin_b78c91() {
+  float res = sin(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sin_b78c91();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_b78c91() {
+  float res = sin(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sin_b78c91();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_b78c91() {
+  float res = sin(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2a71109
--- /dev/null
+++ b/test/intrinsics/gen/sin/fc8bc4.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sin_fc8bc4() {
+  vec2 res = sin(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sin_fc8bc4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_fc8bc4() {
+  vec2 res = sin(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sin_fc8bc4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sin_fc8bc4() {
+  vec2 res = sin(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..daa07fb
--- /dev/null
+++ b/test/intrinsics/gen/sinh/445e33.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sinh_445e33() {
+  vec4 res = sinh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sinh_445e33();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_445e33() {
+  vec4 res = sinh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sinh_445e33();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_445e33() {
+  vec4 res = sinh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..5788072
--- /dev/null
+++ b/test/intrinsics/gen/sinh/7bb598.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sinh_7bb598() {
+  float res = sinh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sinh_7bb598();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_7bb598() {
+  float res = sinh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sinh_7bb598();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_7bb598() {
+  float res = sinh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4662041
--- /dev/null
+++ b/test/intrinsics/gen/sinh/b9860e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sinh_b9860e() {
+  vec2 res = sinh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sinh_b9860e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_b9860e() {
+  vec2 res = sinh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sinh_b9860e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_b9860e() {
+  vec2 res = sinh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d586f6d
--- /dev/null
+++ b/test/intrinsics/gen/sinh/c9a5eb.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sinh_c9a5eb() {
+  vec3 res = sinh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sinh_c9a5eb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_c9a5eb() {
+  vec3 res = sinh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sinh_c9a5eb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sinh_c9a5eb() {
+  vec3 res = sinh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..718da19
--- /dev/null
+++ b/test/intrinsics/gen/smoothStep/5f615b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void smoothStep_5f615b() {
+  vec4 res = smoothstep(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  smoothStep_5f615b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_5f615b() {
+  vec4 res = smoothstep(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  smoothStep_5f615b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_5f615b() {
+  vec4 res = smoothstep(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..c207bfc
--- /dev/null
+++ b/test/intrinsics/gen/smoothStep/658be3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void smoothStep_658be3() {
+  vec3 res = smoothstep(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  smoothStep_658be3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_658be3() {
+  vec3 res = smoothstep(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  smoothStep_658be3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_658be3() {
+  vec3 res = smoothstep(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..84956b6
--- /dev/null
+++ b/test/intrinsics/gen/smoothStep/c11eef.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void smoothStep_c11eef() {
+  vec2 res = smoothstep(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  smoothStep_c11eef();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_c11eef() {
+  vec2 res = smoothstep(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  smoothStep_c11eef();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_c11eef() {
+  vec2 res = smoothstep(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e5652e2
--- /dev/null
+++ b/test/intrinsics/gen/smoothStep/cb0bfb.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void smoothStep_cb0bfb() {
+  float res = smoothstep(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  smoothStep_cb0bfb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_cb0bfb() {
+  float res = smoothstep(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  smoothStep_cb0bfb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void smoothStep_cb0bfb() {
+  float res = smoothstep(1.0f, 1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..fda2fe3
--- /dev/null
+++ b/test/intrinsics/gen/sqrt/20c74e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sqrt_20c74e() {
+  float res = sqrt(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sqrt_20c74e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_20c74e() {
+  float res = sqrt(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sqrt_20c74e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_20c74e() {
+  float res = sqrt(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..6139c83
--- /dev/null
+++ b/test/intrinsics/gen/sqrt/8c7024.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sqrt_8c7024() {
+  vec2 res = sqrt(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sqrt_8c7024();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_8c7024() {
+  vec2 res = sqrt(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sqrt_8c7024();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_8c7024() {
+  vec2 res = sqrt(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4ff825a
--- /dev/null
+++ b/test/intrinsics/gen/sqrt/aa0d7a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sqrt_aa0d7a() {
+  vec4 res = sqrt(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sqrt_aa0d7a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_aa0d7a() {
+  vec4 res = sqrt(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sqrt_aa0d7a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_aa0d7a() {
+  vec4 res = sqrt(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3108670
--- /dev/null
+++ b/test/intrinsics/gen/sqrt/f8c59a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void sqrt_f8c59a() {
+  vec3 res = sqrt(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  sqrt_f8c59a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_f8c59a() {
+  vec3 res = sqrt(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  sqrt_f8c59a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void sqrt_f8c59a() {
+  vec3 res = sqrt(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4d68bbe
--- /dev/null
+++ b/test/intrinsics/gen/step/0b073b.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void step_0b073b() {
+  float res = step(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  step_0b073b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_0b073b() {
+  float res = step(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  step_0b073b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_0b073b() {
+  float res = step(1.0f, 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..8ffb095
--- /dev/null
+++ b/test/intrinsics/gen/step/19accd.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void step_19accd() {
+  vec2 res = step(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  step_19accd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_19accd() {
+  vec2 res = step(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  step_19accd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_19accd() {
+  vec2 res = step(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..341d813
--- /dev/null
+++ b/test/intrinsics/gen/step/334303.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void step_334303() {
+  vec3 res = step(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  step_334303();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_334303() {
+  vec3 res = step(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  step_334303();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_334303() {
+  vec3 res = step(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a195908
--- /dev/null
+++ b/test/intrinsics/gen/step/e2b337.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void step_e2b337() {
+  vec4 res = step(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  step_e2b337();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_e2b337() {
+  vec4 res = step(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  step_e2b337();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void step_e2b337() {
+  vec4 res = step(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..2d34b7e
--- /dev/null
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void storageBarrier_d87211() {
+  DeviceMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  storageBarrier_d87211();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'DeviceMemoryBarrierWithGroupSync' : no matching overloaded function found 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl b/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
new file mode 100644
index 0000000..6b22fc9
--- /dev/null
+++ b/test/intrinsics/gen/tan/244e2a.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tan_244e2a() {
+  vec4 res = tan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tan_244e2a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_244e2a() {
+  vec4 res = tan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tan_244e2a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_244e2a() {
+  vec4 res = tan(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..434c308
--- /dev/null
+++ b/test/intrinsics/gen/tan/2f030e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tan_2f030e() {
+  float res = tan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tan_2f030e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_2f030e() {
+  float res = tan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tan_2f030e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_2f030e() {
+  float res = tan(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..069bc3f
--- /dev/null
+++ b/test/intrinsics/gen/tan/7ea104.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tan_7ea104() {
+  vec3 res = tan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tan_7ea104();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_7ea104() {
+  vec3 res = tan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tan_7ea104();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_7ea104() {
+  vec3 res = tan(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..aa809f2
--- /dev/null
+++ b/test/intrinsics/gen/tan/8ce3e9.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tan_8ce3e9() {
+  vec2 res = tan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tan_8ce3e9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_8ce3e9() {
+  vec2 res = tan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tan_8ce3e9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tan_8ce3e9() {
+  vec2 res = tan(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..3b932c9
--- /dev/null
+++ b/test/intrinsics/gen/tanh/5663c5.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tanh_5663c5() {
+  vec4 res = tanh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tanh_5663c5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_5663c5() {
+  vec4 res = tanh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tanh_5663c5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_5663c5() {
+  vec4 res = tanh(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..bec23d5
--- /dev/null
+++ b/test/intrinsics/gen/tanh/5724b3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tanh_5724b3() {
+  vec2 res = tanh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tanh_5724b3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_5724b3() {
+  vec2 res = tanh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tanh_5724b3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_5724b3() {
+  vec2 res = tanh(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..bd763b2
--- /dev/null
+++ b/test/intrinsics/gen/tanh/9f9fb9.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tanh_9f9fb9() {
+  vec3 res = tanh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tanh_9f9fb9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_9f9fb9() {
+  vec3 res = tanh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tanh_9f9fb9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_9f9fb9() {
+  vec3 res = tanh(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..59b0f13
--- /dev/null
+++ b/test/intrinsics/gen/tanh/c15fdb.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void tanh_c15fdb() {
+  float res = tanh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  tanh_c15fdb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_c15fdb() {
+  float res = tanh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  tanh_c15fdb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void tanh_c15fdb() {
+  float res = tanh(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ee559be
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/002b2a.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureDimensions_002b2a() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_002b2a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureDimensions_002b2a() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_002b2a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureDimensions_002b2a() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_002b2a();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
new file mode 100644
index 0000000..8068e3b
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/012b82.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_012b82() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_012b82();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_012b82() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_012b82();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_012b82() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_012b82();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
new file mode 100644
index 0000000..2edf754
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/08753d.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_08753d() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_08753d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_08753d() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_08753d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_08753d() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_08753d();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
new file mode 100644
index 0000000..4e3e717
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/0c4772.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_0c4772() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_0c4772();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_0c4772() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_0c4772();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_0c4772() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_0c4772();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
new file mode 100644
index 0000000..869d6e8
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/0cce40.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_0cce40() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_0cce40();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_0cce40() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_0cce40();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_0cce40() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_0cce40();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
new file mode 100644
index 0000000..24f9d89
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/0cf2ff.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_0cf2ff() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_0cf2ff();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_0cf2ff() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_0cf2ff();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_0cf2ff() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_0cf2ff();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
new file mode 100644
index 0000000..6623d1f
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/0d8b7e.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_0d8b7e() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_0d8b7e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_0d8b7e() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_0d8b7e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_0d8b7e() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_0d8b7e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
new file mode 100644
index 0000000..4e14a83
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/0e32ee.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_0e32ee() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_0e32ee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_0e32ee() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_0e32ee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_0e32ee() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_0e32ee();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
new file mode 100644
index 0000000..5f5c12a
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/0f3c50.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureDimensions_0f3c50() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_0f3c50();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureDimensions_0f3c50() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_0f3c50();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureDimensions_0f3c50() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_0f3c50();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
new file mode 100644
index 0000000..8f13b80
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/1191a5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureDimensions_1191a5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_1191a5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureDimensions_1191a5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_1191a5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureDimensions_1191a5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_1191a5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
new file mode 100644
index 0000000..ad5149f
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/12c9bb.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_12c9bb() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_12c9bb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_12c9bb() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_12c9bb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_12c9bb() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_12c9bb();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
new file mode 100644
index 0000000..2d56955
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/147998.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_147998() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_147998();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_147998() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_147998();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_147998() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_147998();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
new file mode 100644
index 0000000..3533374
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/16036c.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_16036c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_16036c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_16036c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_16036c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_16036c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_16036c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
new file mode 100644
index 0000000..0d31f7f
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/1b71f0.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_1b71f0() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_1b71f0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_1b71f0() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_1b71f0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_1b71f0() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_1b71f0();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
new file mode 100644
index 0000000..907b5f6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/1d6c26.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_1d6c26() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_1d6c26();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_1d6c26() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_1d6c26();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_1d6c26() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_1d6c26();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
new file mode 100644
index 0000000..e216b95
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/1e9e39.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_1e9e39() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_1e9e39();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_1e9e39() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_1e9e39();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_1e9e39() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_1e9e39();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
new file mode 100644
index 0000000..de62918
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/1f20c5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureDimensions_1f20c5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_1f20c5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureDimensions_1f20c5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_1f20c5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureDimensions_1f20c5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_1f20c5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
new file mode 100644
index 0000000..65f32a7
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/214dd4.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_214dd4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_214dd4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_214dd4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_214dd4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_214dd4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_214dd4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
new file mode 100644
index 0000000..46c553b
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/221f22.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureDimensions_221f22() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_221f22();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureDimensions_221f22() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_221f22();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureDimensions_221f22() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_221f22();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
new file mode 100644
index 0000000..e3167c3
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/267788.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureDimensions_267788() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_267788();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureDimensions_267788() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_267788();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureDimensions_267788() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_267788();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
new file mode 100644
index 0000000..36fc485
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/26bdfa.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureDimensions_26bdfa() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_26bdfa();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureDimensions_26bdfa() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_26bdfa();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureDimensions_26bdfa() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_26bdfa();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
new file mode 100644
index 0000000..791209e
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/26ef6c.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_26ef6c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_26ef6c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_26ef6c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_26ef6c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_26ef6c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_26ef6c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
new file mode 100644
index 0000000..ec36824
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/2ad087.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_2ad087() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_2ad087();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_2ad087() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_2ad087();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_2ad087() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_2ad087();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
new file mode 100644
index 0000000..9e0d6f6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/2efa05.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureDimensions_2efa05() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_2efa05();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureDimensions_2efa05() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_2efa05();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureDimensions_2efa05() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_2efa05();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
new file mode 100644
index 0000000..05e1aa2
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/2f289f.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_2f289f() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_2f289f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_2f289f() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_2f289f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_2f289f() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_2f289f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
new file mode 100644
index 0000000..a301213
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/2fe1cc.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_2fe1cc() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_2fe1cc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_2fe1cc() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_2fe1cc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_2fe1cc() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_2fe1cc();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
new file mode 100644
index 0000000..1f687b5
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/318ecc.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_318ecc() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_318ecc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_318ecc() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_318ecc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_318ecc() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_318ecc();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
new file mode 100644
index 0000000..b36a064
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/340d06.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_340d06() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_340d06();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_340d06() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_340d06();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_340d06() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_340d06();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
new file mode 100644
index 0000000..68168cc
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/398e30.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_398e30() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_398e30();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_398e30() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_398e30();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_398e30() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_398e30();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
new file mode 100644
index 0000000..c2e5d0a
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/3a94ea.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_3a94ea() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_3a94ea();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_3a94ea() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_3a94ea();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_3a94ea() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_3a94ea();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
new file mode 100644
index 0000000..d3b50a3
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/3aca08.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_3aca08() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_3aca08();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_3aca08() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_3aca08();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_3aca08() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_3aca08();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
new file mode 100644
index 0000000..d0e6937
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/3c5ad8.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_3c5ad8() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_3c5ad8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_3c5ad8() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_3c5ad8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_3c5ad8() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_3c5ad8();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
new file mode 100644
index 0000000..f327cfc
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/4152a6.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureDimensions_4152a6() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_4152a6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureDimensions_4152a6() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_4152a6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureDimensions_4152a6() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_4152a6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
new file mode 100644
index 0000000..b3ffbf6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/423f99.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureDimensions_423f99() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_423f99();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureDimensions_423f99() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_423f99();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureDimensions_423f99() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_423f99();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
new file mode 100644
index 0000000..54574e4
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/4267ee.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_4267ee() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_4267ee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_4267ee() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_4267ee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_4267ee() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_4267ee();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
new file mode 100644
index 0000000..a55a931
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/42d4e6.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_42d4e6() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_42d4e6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_42d4e6() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_42d4e6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_42d4e6() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_42d4e6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
new file mode 100644
index 0000000..51d3620
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/48cb89.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_48cb89() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_48cb89();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_48cb89() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_48cb89();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_48cb89() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_48cb89();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
new file mode 100644
index 0000000..fa2ffd6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/49d274.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_49d274() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_49d274();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_49d274() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_49d274();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_49d274() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_49d274();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
new file mode 100644
index 0000000..1f940ca
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/4df9a8.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_4df9a8() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_4df9a8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_4df9a8() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_4df9a8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_4df9a8() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_4df9a8();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
new file mode 100644
index 0000000..3abdb03
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/50a9ee.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_50a9ee() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_50a9ee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_50a9ee() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_50a9ee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_50a9ee() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_50a9ee();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
new file mode 100644
index 0000000..b104509
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/52045c.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureDimensions_52045c() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_52045c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureDimensions_52045c() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_52045c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureDimensions_52045c() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_52045c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
new file mode 100644
index 0000000..2709ff7
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/55b23e.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_55b23e() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_55b23e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_55b23e() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_55b23e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_55b23e() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_55b23e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
new file mode 100644
index 0000000..e708085
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/579629.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureDimensions_579629() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_579629();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureDimensions_579629() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_579629();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureDimensions_579629() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..99c6588
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/57da0b.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_57da0b() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_57da0b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_57da0b() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_57da0b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_57da0b() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_57da0b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
new file mode 100644
index 0000000..03bc16c
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/57e28f.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_57e28f() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_57e28f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_57e28f() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_57e28f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_57e28f() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_57e28f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
new file mode 100644
index 0000000..99db49e
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/58a515.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_58a515() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_58a515();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_58a515() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_58a515();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_58a515() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_58a515();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
new file mode 100644
index 0000000..5bfcbd3
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/5985f3.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_5985f3() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_5985f3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_5985f3() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_5985f3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_5985f3() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_5985f3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
new file mode 100644
index 0000000..408ee5e
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/5caa5e.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_5caa5e() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_5caa5e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_5caa5e() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_5caa5e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_5caa5e() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_5caa5e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
new file mode 100644
index 0000000..427787e
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/5e295d.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_5e295d() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_5e295d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_5e295d() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_5e295d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_5e295d() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_5e295d();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
new file mode 100644
index 0000000..dc58a7f
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/60bf54.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_60bf54() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_60bf54();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_60bf54() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_60bf54();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_60bf54() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_60bf54();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
new file mode 100644
index 0000000..c595ee6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/63f3cf.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_63f3cf() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_63f3cf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_63f3cf() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_63f3cf();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_63f3cf() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_63f3cf();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
new file mode 100644
index 0000000..154f8a4
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/68105c.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_68105c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_68105c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_68105c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_68105c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_68105c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_68105c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
new file mode 100644
index 0000000..c4caae2
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/686ef2.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureDimensions_686ef2() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_686ef2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureDimensions_686ef2() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_686ef2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureDimensions_686ef2() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_686ef2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
new file mode 100644
index 0000000..9bc3aa7
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/6adac6.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_6adac6() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_6adac6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_6adac6() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_6adac6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_6adac6() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_6adac6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
new file mode 100644
index 0000000..5361211
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/6ec1b4.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureDimensions_6ec1b4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_6ec1b4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureDimensions_6ec1b4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_6ec1b4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureDimensions_6ec1b4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_6ec1b4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
new file mode 100644
index 0000000..131696b
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/6f0d79.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_6f0d79() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_6f0d79();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_6f0d79() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_6f0d79();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_6f0d79() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_6f0d79();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
new file mode 100644
index 0000000..d7f503c
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/702c53.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_702c53() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_702c53();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_702c53() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_702c53();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_702c53() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_702c53();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
new file mode 100644
index 0000000..afdd8ae
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/72e5d6.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_72e5d6() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_72e5d6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_72e5d6() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_72e5d6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_72e5d6() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_72e5d6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
new file mode 100644
index 0000000..df167b6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/79df87.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureDimensions_79df87() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_79df87();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureDimensions_79df87() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_79df87();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureDimensions_79df87() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_79df87();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
new file mode 100644
index 0000000..690ed87
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/7bf826.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_7bf826() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_7bf826();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_7bf826() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_7bf826();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_7bf826() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_7bf826();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
new file mode 100644
index 0000000..9671c94
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/7f5c2e.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_7f5c2e() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_7f5c2e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_7f5c2e() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_7f5c2e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_7f5c2e() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_7f5c2e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
new file mode 100644
index 0000000..5ff0573
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/8028f3.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_8028f3() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_8028f3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_8028f3() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_8028f3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_8028f3() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_8028f3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
new file mode 100644
index 0000000..dc17343
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/811679.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_811679() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_811679();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_811679() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_811679();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_811679() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_811679();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
new file mode 100644
index 0000000..6086ba8
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/820596.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_820596() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_820596();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_820596() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_820596();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_820596() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_820596();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
new file mode 100644
index 0000000..c4c26c6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/83ee5a.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_83ee5a() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_83ee5a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_83ee5a() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_83ee5a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_83ee5a() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_83ee5a();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
new file mode 100644
index 0000000..2a19a18
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/85d556.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_85d556() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_85d556();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_85d556() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_85d556();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_85d556() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_85d556();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
new file mode 100644
index 0000000..85a5517
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/88ad17.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureDimensions_88ad17() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_88ad17();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureDimensions_88ad17() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_88ad17();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureDimensions_88ad17() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_88ad17();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
new file mode 100644
index 0000000..347f303
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/8aa4c4.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureDimensions_8aa4c4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_8aa4c4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureDimensions_8aa4c4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_8aa4c4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureDimensions_8aa4c4() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_8aa4c4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
new file mode 100644
index 0000000..4ca8327
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/8deb5e.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureDimensions_8deb5e() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_8deb5e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureDimensions_8deb5e() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_8deb5e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureDimensions_8deb5e() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_8deb5e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
new file mode 100644
index 0000000..016ccda
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/8f20bf.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_8f20bf() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_8f20bf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_8f20bf() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_8f20bf();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_8f20bf() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_8f20bf();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
new file mode 100644
index 0000000..3758493
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/8fca0f.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_8fca0f() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_8fca0f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_8fca0f() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_8fca0f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_8fca0f() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_8fca0f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
new file mode 100644
index 0000000..ccaa63d
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/90340b.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_90340b() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_90340b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_90340b() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_90340b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_90340b() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_90340b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
new file mode 100644
index 0000000..714716a
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9042ab.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_9042ab() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9042ab();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_9042ab() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9042ab();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_9042ab() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9042ab();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
new file mode 100644
index 0000000..7b3bca8
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9393b0.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_9393b0() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9393b0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_9393b0() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9393b0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_9393b0() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9393b0();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
new file mode 100644
index 0000000..89bbc24
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/939fdb.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_939fdb() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_939fdb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_939fdb() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_939fdb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_939fdb() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_939fdb();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
new file mode 100644
index 0000000..bccfcb4
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/962dcd.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureDimensions_962dcd() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_962dcd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureDimensions_962dcd() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_962dcd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureDimensions_962dcd() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_962dcd();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
new file mode 100644
index 0000000..02efa44
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9abfe5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_9abfe5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9abfe5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_9abfe5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9abfe5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_9abfe5() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9abfe5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
new file mode 100644
index 0000000..ef9b87b
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9c9c57.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureDimensions_9c9c57() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9c9c57();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureDimensions_9c9c57() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9c9c57();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureDimensions_9c9c57() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9c9c57();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
new file mode 100644
index 0000000..c174102
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9da9e2.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_9da9e2() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9da9e2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_9da9e2() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9da9e2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_9da9e2() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9da9e2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
new file mode 100644
index 0000000..eb33753
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9eb8d8.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_9eb8d8() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9eb8d8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_9eb8d8() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9eb8d8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_9eb8d8() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9eb8d8();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
new file mode 100644
index 0000000..758f819
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/9f8e46.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_9f8e46() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_9f8e46();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_9f8e46() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_9f8e46();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_9f8e46() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_9f8e46();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
new file mode 100644
index 0000000..e18ab70
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/a01845.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_a01845() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_a01845();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_a01845() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_a01845();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureDimensions_a01845() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_a01845();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
new file mode 100644
index 0000000..b5050a6
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/a7d565.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureDimensions_a7d565() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_a7d565();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureDimensions_a7d565() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_a7d565();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureDimensions_a7d565() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_a7d565();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
new file mode 100644
index 0000000..bd6a78d
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/a863f2.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_a863f2() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_a863f2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_a863f2() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_a863f2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_a863f2() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_a863f2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
new file mode 100644
index 0000000..a5c5f7e
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/a9c9c1.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_a9c9c1() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_a9c9c1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_a9c9c1() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_a9c9c1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_a9c9c1() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_a9c9c1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
new file mode 100644
index 0000000..f8b587b
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/b0e16d.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureDimensions_b0e16d() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_b0e16d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureDimensions_b0e16d() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_b0e16d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureDimensions_b0e16d() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_b0e16d();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
new file mode 100644
index 0000000..a73bfc2
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/b3c954.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureDimensions_b3c954() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_b3c954();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureDimensions_b3c954() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_b3c954();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureDimensions_b3c954() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_b3c954();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
new file mode 100644
index 0000000..ab2710f
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/b3e407.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureDimensions_b3e407() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_b3e407();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureDimensions_b3e407() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_b3e407();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureDimensions_b3e407() {
+  int res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_b3e407();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
new file mode 100644
index 0000000..d955600
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/b91240.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_b91240() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_b91240();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_b91240() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_b91240();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_b91240() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_b91240();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
new file mode 100644
index 0000000..e4c4b67
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_ba1481() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_ba1481();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_ba1481() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_ba1481();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureDimensions_ba1481() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_ba1481();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
new file mode 100644
index 0000000..f536b88
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/bb3dde.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_bb3dde() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_bb3dde();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_bb3dde() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_bb3dde();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_bb3dde() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_bb3dde();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
new file mode 100644
index 0000000..b6962ff
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/c30e75.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_c30e75() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_c30e75();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_c30e75() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_c30e75();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_c30e75() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_c30e75();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
new file mode 100644
index 0000000..a0c743e
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/c7943d.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_c7943d() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_c7943d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_c7943d() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_c7943d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_c7943d() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_c7943d();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
new file mode 100644
index 0000000..611fe64
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/cc968c.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_cc968c() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_cc968c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_cc968c() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_cc968c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_cc968c() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_cc968c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
new file mode 100644
index 0000000..9eeb727
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/cccc8f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_cccc8f() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_cccc8f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_cccc8f() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_cccc8f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_cccc8f() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_cccc8f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
new file mode 100644
index 0000000..6b1c12f
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/cd76a7.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_cd76a7() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_cd76a7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_cd76a7() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_cd76a7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_cd76a7() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_cd76a7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
new file mode 100644
index 0000000..900eefd
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/cdf473.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_cdf473() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_cdf473();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_cdf473() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_cdf473();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_cdf473() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_cdf473();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
new file mode 100644
index 0000000..74ad431
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/cec841.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_cec841() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_cec841();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_cec841() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_cec841();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureDimensions_cec841() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_cec841();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
new file mode 100644
index 0000000..9b046a7
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/cf7e43.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_cf7e43() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_cf7e43();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_cf7e43() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_cf7e43();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_cf7e43() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_cf7e43();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
new file mode 100644
index 0000000..dd0e425
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/d125bc.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_d125bc() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_d125bc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_d125bc() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_d125bc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureDimensions_d125bc() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_d125bc();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
new file mode 100644
index 0000000..281157b
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/d83c45.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureDimensions_d83c45() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_d83c45();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureDimensions_d83c45() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_d83c45();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureDimensions_d83c45() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_d83c45();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
new file mode 100644
index 0000000..9a6fa2a
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/daf7c0.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureDimensions_daf7c0() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_daf7c0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureDimensions_daf7c0() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_daf7c0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureDimensions_daf7c0() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f2186e9
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/dc2dd0.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_dc2dd0() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_dc2dd0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_dc2dd0() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_dc2dd0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureDimensions_dc2dd0() {
+  int res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_dc2dd0();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
new file mode 100644
index 0000000..3def416
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/e927be.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureDimensions_e927be() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_e927be();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureDimensions_e927be() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_e927be();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureDimensions_e927be() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_e927be();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
new file mode 100644
index 0000000..01990ce
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/e9e96c.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_e9e96c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_e9e96c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_e9e96c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_e9e96c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_e9e96c() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_e9e96c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
new file mode 100644
index 0000000..1e0aa55
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/ef5b89.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_ef5b89() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_ef5b89();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_ef5b89() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_ef5b89();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_ef5b89() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..c302cd1
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/efc8a4.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureDimensions_efc8a4() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_efc8a4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureDimensions_efc8a4() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_efc8a4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureDimensions_efc8a4() {
+  ivec3 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_efc8a4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
new file mode 100644
index 0000000..c354540
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/f60bdb.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_f60bdb() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_f60bdb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_f60bdb() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_f60bdb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_f60bdb() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..107c023
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/f7145b.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureDimensions_f7145b() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_f7145b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureDimensions_f7145b() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_f7145b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureDimensions_f7145b() {
+  ivec2 res = textureSize(arg_00);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_f7145b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'arg_00' : undeclared identifier 
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
new file mode 100644
index 0000000..f822402
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/f931c7.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_f931c7() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_f931c7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_f931c7() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_f931c7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureDimensions_f931c7() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_f931c7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
new file mode 100644
index 0000000..ff07154
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/fa9859.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureDimensions_fa9859() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_fa9859();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureDimensions_fa9859() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_fa9859();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureDimensions_fa9859() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_fa9859();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
new file mode 100644
index 0000000..7cf68ce
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/fb5670.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_fb5670() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_fb5670();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_fb5670() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_fb5670();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureDimensions_fb5670() {
+  ivec2 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_fb5670();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
new file mode 100644
index 0000000..aff41d7
--- /dev/null
+++ b/test/intrinsics/gen/textureDimensions/fcac78.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_fcac78() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureDimensions_fcac78();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_fcac78() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureDimensions_fcac78();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureDimensions_fcac78() {
+  ivec3 res = textureSize(arg_0);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureDimensions_fcac78();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'textureSize' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 3-component vector of int'
+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
new file mode 100644
index 0000000..c0c1d75
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/19cf87.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_19cf87() {
+  float res = texelFetch(arg_0, ivec3(0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_19cf87();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_19cf87() {
+  float res = texelFetch(arg_0, ivec3(0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_19cf87();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_19cf87() {
+  float res = texelFetch(arg_0, ivec3(0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_19cf87();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
new file mode 100644
index 0000000..c4b25b1
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/1b8588.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureLoad_1b8588() {
+  uvec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_1b8588();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureLoad_1b8588() {
+  uvec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_1b8588();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureLoad_1b8588() {
+  uvec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_1b8588();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
new file mode 100644
index 0000000..a3e04c8
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/1f2016.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureLoad_1f2016() {
+  vec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_1f2016();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureLoad_1f2016() {
+  vec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_1f2016();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureLoad_1f2016() {
+  vec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_1f2016();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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/484344.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
new file mode 100644
index 0000000..7a08dfc
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/484344.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_484344() {
+  vec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_484344();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_484344() {
+  vec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_484344();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_484344() {
+  vec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_484344();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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/4fd803.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
new file mode 100644
index 0000000..e3ac256
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/4fd803.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureLoad_4fd803() {
+  ivec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_4fd803();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureLoad_4fd803() {
+  ivec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_4fd803();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureLoad_4fd803() {
+  ivec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_4fd803();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
new file mode 100644
index 0000000..54c2afa
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/5a2f9d.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureLoad_5a2f9d() {
+  ivec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_5a2f9d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureLoad_5a2f9d() {
+  ivec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_5a2f9d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureLoad_5a2f9d() {
+  ivec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_5a2f9d();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
new file mode 100644
index 0000000..7bc6f13
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/6154d4.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureLoad_6154d4() {
+  uvec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_6154d4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureLoad_6154d4() {
+  uvec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_6154d4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureLoad_6154d4() {
+  uvec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_6154d4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
new file mode 100644
index 0000000..d4c7d9f
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/6273b1.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_6273b1() {
+  float res = texelFetch(arg_0, ivec3(0, 0, 0), 1).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_6273b1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_6273b1() {
+  float res = texelFetch(arg_0, ivec3(0, 0, 0), 1).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_6273b1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_6273b1() {
+  float res = texelFetch(arg_0, ivec3(0, 0, 0), 1).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_6273b1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
new file mode 100644
index 0000000..c54cfab
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/79e697.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureLoad_79e697() {
+  ivec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_79e697();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureLoad_79e697() {
+  ivec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_79e697();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureLoad_79e697() {
+  ivec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_79e697();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
new file mode 100644
index 0000000..185420d
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/7c90e5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureLoad_7c90e5() {
+  uvec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_7c90e5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureLoad_7c90e5() {
+  uvec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_7c90e5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureLoad_7c90e5() {
+  uvec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_7c90e5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
new file mode 100644
index 0000000..a4dd2b3
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/81c381.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureLoad_81c381() {
+  vec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_81c381();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureLoad_81c381() {
+  vec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_81c381();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureLoad_81c381() {
+  vec4 res = texelFetch(arg_0, ivec2(1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_81c381();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
new file mode 100644
index 0000000..a9273cc
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/87be85.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureLoad_87be85() {
+  vec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_87be85();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureLoad_87be85() {
+  vec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_87be85();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureLoad_87be85() {
+  vec4 res = texelFetch(arg_0, ivec4(0, 0, 1, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_87be85();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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/8acf41.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
new file mode 100644
index 0000000..67f63fc
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_8acf41() {
+  vec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_8acf41();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_8acf41() {
+  vec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_8acf41();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureLoad_8acf41() {
+  vec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_8acf41();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : 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/9b2667.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
new file mode 100644
index 0000000..ac1488f
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/9b2667.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureLoad_9b2667() {
+  float res = texelFetch(arg_0, ivec4(0, 0, 1, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_9b2667();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureLoad_9b2667() {
+  float res = texelFetch(arg_0, ivec4(0, 0, 1, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_9b2667();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureLoad_9b2667() {
+  float res = texelFetch(arg_0, ivec4(0, 0, 1, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_9b2667();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
new file mode 100644
index 0000000..cb434f5
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/a583c9.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_a583c9() {
+  vec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_a583c9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_a583c9() {
+  vec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_a583c9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_a583c9() {
+  vec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..44c93d1
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/a9a9f5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureLoad_a9a9f5() {
+  uvec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_a9a9f5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureLoad_a9a9f5() {
+  uvec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_a9a9f5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureLoad_a9a9f5() {
+  uvec4 res = texelFetch(arg_0, ivec4(0, 0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_a9a9f5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of uint'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
new file mode 100644
index 0000000..a15bef5
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/c2a480.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureLoad_c2a480() {
+  ivec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_c2a480();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureLoad_c2a480() {
+  ivec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_c2a480();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureLoad_c2a480() {
+  ivec4 res = texelFetch(arg_0, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureLoad_c2a480();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:7: '=' :  cannot convert from ' const float' to ' temp highp 4-component vector of int'
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
new file mode 100644
index 0000000..57511b1
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/c378ee.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureLoad_c378ee() {
+  uvec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_c378ee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureLoad_c378ee() {
+  uvec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_c378ee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureLoad_c378ee() {
+  uvec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e5c4ee8
--- /dev/null
+++ b/test/intrinsics/gen/textureLoad/e3d2cc.wgsl.expected.glsl
@@ -0,0 +1,77 @@
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureLoad_e3d2cc() {
+  ivec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureLoad_e3d2cc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureLoad_e3d2cc() {
+  ivec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureLoad_e3d2cc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureLoad_e3d2cc() {
+  ivec4 res = texelFetch(arg_0, ivec2(0, 0), 1);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..b513151
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/024820.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLayers_024820() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_024820();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLayers_024820() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLayers_024820() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..2319625
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/053df7.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureNumLayers_053df7() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_053df7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureNumLayers_053df7() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_053df7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureNumLayers_053df7() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_053df7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
new file mode 100644
index 0000000..cdbae00
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/058cc3.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_058cc3() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_058cc3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_058cc3() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_058cc3();
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_058cc3() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_058cc3();
+  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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
new file mode 100644
index 0000000..2cff982
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/09d05d.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_09d05d() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_09d05d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_09d05d() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_09d05d() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..6f2e095
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/13b4ce.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_13b4ce() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_13b4ce();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_13b4ce() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_13b4ce() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..5ef0fee
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/22e53b.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_22e53b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_22e53b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_22e53b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_22e53b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..9fcdb8c
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/562013.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_562013() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_562013();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_562013() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_562013() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..b7fff6a
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/5d59cd.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLayers_5d59cd() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_5d59cd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLayers_5d59cd() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_5d59cd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLayers_5d59cd() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_5d59cd();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
new file mode 100644
index 0000000..e62b6d7
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/68a65b.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_68a65b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_68a65b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_68a65b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_68a65b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..0fdca03
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/778bd1.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLayers_778bd1() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_778bd1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLayers_778bd1() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_778bd1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLayers_778bd1() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_778bd1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
new file mode 100644
index 0000000..fe25334
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/7f1937.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_7f1937() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_7f1937();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_7f1937() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_7f1937();
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_7f1937() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_7f1937();
+  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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
new file mode 100644
index 0000000..c7f5e15
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/85f980.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureNumLayers_85f980() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_85f980();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureNumLayers_85f980() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_85f980();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureNumLayers_85f980() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_85f980();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
new file mode 100644
index 0000000..a8374fd
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/87953e.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureNumLayers_87953e() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_87953e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureNumLayers_87953e() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureNumLayers_87953e() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..56a5821
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/893e7c.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureNumLayers_893e7c() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_893e7c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureNumLayers_893e7c() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureNumLayers_893e7c() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..d873766
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/9700fb.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_9700fb() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_9700fb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_9700fb() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_9700fb() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..b71292e
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/a216d2.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_a216d2() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_a216d2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_a216d2() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_a216d2() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..3279102
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/cd5dc8.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_cd5dc8() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_cd5dc8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_cd5dc8() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_cd5dc8() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..a0123fd
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/d5b228.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_d5b228() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_d5b228();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_d5b228() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_d5b228() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..3cc2e8a
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/e31be1.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_e31be1() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_e31be1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_e31be1() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_e31be1() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..9f60963
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/e653c0.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLayers_e653c0() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_e653c0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLayers_e653c0() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLayers_e653c0() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..7b38eb6
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/ee942f.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_ee942f() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_ee942f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_ee942f() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_ee942f() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..6a077c9
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/f33005.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_f33005() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_f33005();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_f33005() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_f33005() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..320f8e9
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/fcec98.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_fcec98() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_fcec98();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_fcec98() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLayers_fcec98();
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_fcec98() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLayers_fcec98();
+  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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
new file mode 100644
index 0000000..4d595be
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLayers/ff5e89.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_ff5e89() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLayers_ff5e89();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_ff5e89() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureNumLayers_ff5e89() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..60570af
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/076cb5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureNumLevels_076cb5() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_076cb5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureNumLevels_076cb5() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureNumLevels_076cb5() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..d5825e7
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/080d95.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureNumLevels_080d95() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_080d95();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureNumLevels_080d95() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCube arg_0;
+
+void textureNumLevels_080d95() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..176fbde
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/09ddd0.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureNumLevels_09ddd0() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_09ddd0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureNumLevels_09ddd0() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2D arg_0;
+
+void textureNumLevels_09ddd0() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..53a5318
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/105988.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLevels_105988() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_105988();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLevels_105988() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLevels_105988() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..2ffe003
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/1e6f3b.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureNumLevels_1e6f3b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_1e6f3b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureNumLevels_1e6f3b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_1e6f3b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler1D arg_0;
+
+void textureNumLevels_1e6f3b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_1e6f3b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
new file mode 100644
index 0000000..1430293
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/23f750.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureNumLevels_23f750() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_23f750();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureNumLevels_23f750() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2D arg_0;
+
+void textureNumLevels_23f750() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..2076d2e
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/2c3575.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLevels_2c3575() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_2c3575();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLevels_2c3575() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_2c3575();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLevels_2c3575() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_2c3575();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
new file mode 100644
index 0000000..d990da4
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/32a0ae.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureNumLevels_32a0ae() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_32a0ae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureNumLevels_32a0ae() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_32a0ae();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler1D arg_0;
+
+void textureNumLevels_32a0ae() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_32a0ae();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
new file mode 100644
index 0000000..2b4d3e7
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/5101cf.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureNumLevels_5101cf() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_5101cf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureNumLevels_5101cf() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DArray arg_0;
+
+void textureNumLevels_5101cf() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..d5ad1f5
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/51b5bb.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureNumLevels_51b5bb() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_51b5bb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureNumLevels_51b5bb() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_51b5bb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+void textureNumLevels_51b5bb() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_51b5bb();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
new file mode 100644
index 0000000..30e557a
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/897aaf.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureNumLevels_897aaf() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_897aaf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureNumLevels_897aaf() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+void textureNumLevels_897aaf() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..7acaec0
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/9da7a5.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureNumLevels_9da7a5() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_9da7a5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureNumLevels_9da7a5() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler3D arg_0;
+
+void textureNumLevels_9da7a5() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..c1d0c7c
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/a91c03.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureNumLevels_a91c03() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_a91c03();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureNumLevels_a91c03() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_a91c03();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isamplerCubeArray arg_0;
+
+void textureNumLevels_a91c03() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_a91c03();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'isamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
new file mode 100644
index 0000000..415c35d
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/aee7c8.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLevels_aee7c8() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_aee7c8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLevels_aee7c8() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_aee7c8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+void textureNumLevels_aee7c8() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_aee7c8();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
new file mode 100644
index 0000000..6579ed0
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/b1b12b.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureNumLevels_b1b12b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_b1b12b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureNumLevels_b1b12b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureNumLevels_b1b12b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..f3319ec
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/b4f5ea.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureNumLevels_b4f5ea() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_b4f5ea();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureNumLevels_b4f5ea() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler3D arg_0;
+
+void textureNumLevels_b4f5ea() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..b5b0626
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/d004a9.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureNumLevels_d004a9() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_d004a9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureNumLevels_d004a9() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DArray arg_0;
+
+void textureNumLevels_d004a9() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..3ec191d
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/dca09e.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureNumLevels_dca09e() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_dca09e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureNumLevels_dca09e() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+void textureNumLevels_dca09e() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..e11a569
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/e67231.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureNumLevels_e67231() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_e67231();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureNumLevels_e67231() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+void textureNumLevels_e67231() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..6dd5ced
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/ed078b.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureNumLevels_ed078b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_ed078b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureNumLevels_ed078b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCube arg_0;
+
+void textureNumLevels_ed078b() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..fb2037c
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/f46ec6.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureNumLevels_f46ec6() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_f46ec6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureNumLevels_f46ec6() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureNumLevels_f46ec6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usamplerCubeArray arg_0;
+
+void textureNumLevels_f46ec6() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureNumLevels_f46ec6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'usamplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
new file mode 100644
index 0000000..73f917c
--- /dev/null
+++ b/test/intrinsics/gen/textureNumLevels/f5828d.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLevels_f5828d() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumLevels_f5828d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLevels_f5828d() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+void textureNumLevels_f5828d() {
+  int res = textureQueryLevels(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..d21f842
--- /dev/null
+++ b/test/intrinsics/gen/textureNumSamples/2c6f14.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_2c6f14() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumSamples_2c6f14();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_2c6f14() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_2c6f14() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..fa23cef
--- /dev/null
+++ b/test/intrinsics/gen/textureNumSamples/42f8bb.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureNumSamples_42f8bb() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumSamples_42f8bb();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureNumSamples_42f8bb() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp usampler2DMS arg_0;
+
+void textureNumSamples_42f8bb() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..8b37690
--- /dev/null
+++ b/test/intrinsics/gen/textureNumSamples/449d23.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureNumSamples_449d23() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumSamples_449d23();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureNumSamples_449d23() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp isampler2DMS arg_0;
+
+void textureNumSamples_449d23() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..2bc017d
--- /dev/null
+++ b/test/intrinsics/gen/textureNumSamples/a3c8a0.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_a3c8a0() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureNumSamples_a3c8a0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_a3c8a0() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_a3c8a0() {
+  int res = textureSamples(arg_0);;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..9c76023
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/02aa9b.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSample_02aa9b() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0));
+}
+
+void fragment_main() {
+  textureSample_02aa9b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
new file mode 100644
index 0000000..db28188
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/100dc0.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSample_100dc0() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), ivec3(0, 0, 0));
+}
+
+void fragment_main() {
+  textureSample_100dc0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
new file mode 100644
index 0000000..dda133e
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/38bbb9.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSample_38bbb9() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f)).x;
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..838a5d9
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/3b50bd.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSample_3b50bd() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..38057f3
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/4dd1bf.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSample_4dd1bf() {
+  vec4 res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)));
+}
+
+void fragment_main() {
+  textureSample_4dd1bf();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
new file mode 100644
index 0000000..1251a2c
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/51b514.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSample_51b514() {
+  vec4 res = texture(arg_0, vec2(0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..50c9125
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/667d76.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSample_667d76() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), ivec2(0, 0)).x;
+}
+
+void fragment_main() {
+  textureSample_667d76();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
new file mode 100644
index 0000000..e73c688
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/6717ca.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSample_6717ca() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, float(1)));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..9205cfd
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/6e64fb.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D arg_0;
+
+
+void textureSample_6e64fb() {
+  vec4 res = texture(arg_0, 1.0f);
+}
+
+void fragment_main() {
+  textureSample_6e64fb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
new file mode 100644
index 0000000..de9813f
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/7c3baa.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSample_7c3baa() {
+  vec4 res = texture(arg_0, vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+void fragment_main() {
+  textureSample_7c3baa();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
new file mode 100644
index 0000000..95f9c54
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/7e9ffd.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSample_7e9ffd() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1))).x;
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..4770a5f
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/8522e7.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSample_8522e7() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), ivec2(0, 0)).x;
+}
+
+void fragment_main() {
+  textureSample_8522e7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
new file mode 100644
index 0000000..44ec2af
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/c2f4e8.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSample_c2f4e8() {
+  float res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1))).x;
+}
+
+void fragment_main() {
+  textureSample_c2f4e8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
new file mode 100644
index 0000000..5eaee03
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/e53267.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSample_e53267() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f));
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..e8c1b8a
--- /dev/null
+++ b/test/intrinsics/gen/textureSample/ea7030.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSample_ea7030() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f)).x;
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..2a26fea
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/53b9f7.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleBias_53b9f7() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..0bec9b8
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/65ac50.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleBias_65ac50() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+void fragment_main() {
+  textureSampleBias_65ac50();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
new file mode 100644
index 0000000..dfcb3df
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/6a9113.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleBias_6a9113() {
+  vec4 res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..77d67e6
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/80e579.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleBias_80e579() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..41a4646
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/81c19a.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleBias_81c19a() {
+  vec4 res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+void fragment_main() {
+  textureSampleBias_81c19a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
new file mode 100644
index 0000000..df9819b
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/d3fa1b.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleBias_d3fa1b() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+void fragment_main() {
+  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
new file mode 100644
index 0000000..d774879
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/df91bb.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleBias_df91bb() {
+  vec4 res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
+}
+
+void fragment_main() {
+  textureSampleBias_df91bb();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
new file mode 100644
index 0000000..0cc5ca2
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleBias/eed7c4.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleBias_eed7c4() {
+  vec4 res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+void fragment_main() {
+  textureSampleBias_eed7c4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
new file mode 100644
index 0000000..33a587d
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompare/25fcd1.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompare_25fcd1() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+void fragment_main() {
+  textureSampleCompare_25fcd1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : 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
new file mode 100644
index 0000000..ac44077
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompare/3a5923.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompare_3a5923() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+void fragment_main() {
+  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: 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
new file mode 100644
index 0000000..65767b4
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompare/63fb83.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleCompare_63fb83() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+void fragment_main() {
+  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: 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
new file mode 100644
index 0000000..890afeb
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompare/98b85c.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompare_98b85c() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+void fragment_main() {
+  textureSampleCompare_98b85c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : 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
new file mode 100644
index 0000000..19e6bfd
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompare/a3ca7e.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleCompare_a3ca7e() {
+  float res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+void fragment_main() {
+  textureSampleCompare_a3ca7e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
new file mode 100644
index 0000000..d613258
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompare/dd431d.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompare_dd431d() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+void fragment_main() {
+  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: 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
new file mode 100644
index 0000000..a95a718
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompareLevel_011a8f() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleCompareLevel_011a8f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompareLevel_011a8f() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleCompareLevel_011a8f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompareLevel_011a8f() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleCompareLevel_011a8f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : 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
new file mode 100644
index 0000000..8a64730
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompareLevel_1116ed() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleCompareLevel_1116ed();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompareLevel_1116ed() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleCompareLevel_1116ed() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..d8e177c
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleCompareLevel_1568e3() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleCompareLevel_1568e3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleCompareLevel_1568e3() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleCompareLevel_1568e3() {
+  float res = texture(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..faaa290
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompareLevel_2ad2b1() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleCompareLevel_2ad2b1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompareLevel_2ad2b1() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompareLevel_2ad2b1() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..9ce58c5
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleCompareLevel_4cf3a2() {
+  float res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleCompareLevel_4cf3a2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleCompareLevel_4cf3a2() {
+  float res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleCompareLevel_4cf3a2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleCompareLevel_4cf3a2() {
+  float res = texture(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleCompareLevel_4cf3a2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
new file mode 100644
index 0000000..b2d5096
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompareLevel_f8121c() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleCompareLevel_f8121c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompareLevel_f8121c() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleCompareLevel_f8121c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleCompareLevel_f8121c() {
+  float res = texture(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleCompareLevel_f8121c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texture' : no matching overloaded function found 
+ERROR: 0:8: '' : 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
new file mode 100644
index 0000000..de4d084
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/21402b.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleGrad_21402b() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_21402b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleGrad_21402b() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_21402b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleGrad_21402b() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..5193326
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/2ecd8f.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleGrad_2ecd8f() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_2ecd8f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleGrad_2ecd8f() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_2ecd8f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleGrad_2ecd8f() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..97fc7d7
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/468f88.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleGrad_468f88() {
+  vec4 res = textureGrad(arg_0, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_468f88();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleGrad_468f88() {
+  vec4 res = textureGrad(arg_0, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_468f88();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleGrad_468f88() {
+  vec4 res = textureGrad(arg_0, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleGrad_468f88();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
new file mode 100644
index 0000000..9f76b21
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/521263.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleGrad_521263() {
+  vec4 res = textureGrad(arg_0, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_521263();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleGrad_521263() {
+  vec4 res = textureGrad(arg_0, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_521263();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleGrad_521263() {
+  vec4 res = textureGrad(arg_0, vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..e25e7db
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/5312f4.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleGrad_5312f4() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_5312f4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleGrad_5312f4() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_5312f4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleGrad_5312f4() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..68389a9
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/872f00.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleGrad_872f00() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_872f00();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleGrad_872f00() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_872f00();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleGrad_872f00() {
+  vec4 res = textureGrad(arg_0, vec3(0.0f, 0.0f, float(1)), vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleGrad_872f00();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
new file mode 100644
index 0000000..1f9fd0e
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/e383db.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleGrad_e383db() {
+  vec4 res = textureGrad(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_e383db();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleGrad_e383db() {
+  vec4 res = textureGrad(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_e383db();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleGrad_e383db() {
+  vec4 res = textureGrad(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleGrad_e383db();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
new file mode 100644
index 0000000..e2bad29
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleGrad/e9a2f7.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleGrad_e9a2f7() {
+  vec4 res = textureGrad(arg_0, 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));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleGrad_e9a2f7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleGrad_e9a2f7() {
+  vec4 res = textureGrad(arg_0, 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));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleGrad_e9a2f7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleGrad_e9a2f7() {
+  vec4 res = textureGrad(arg_0, 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));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleGrad_e9a2f7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureGrad' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
new file mode 100644
index 0000000..2f99e42
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/02be59.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_02be59() {
+  float res = textureLod(arg_0, vec2(0.0f, 0.0f), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_02be59();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_02be59() {
+  float res = textureLod(arg_0, vec2(0.0f, 0.0f), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_02be59() {
+  float res = textureLod(arg_0, vec2(0.0f, 0.0f), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..e386347
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/0bdd9a.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleLevel_0bdd9a() {
+  vec4 res = textureLod(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_0bdd9a();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleLevel_0bdd9a() {
+  vec4 res = textureLod(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_0bdd9a();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleLevel_0bdd9a() {
+  vec4 res = textureLod(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_0bdd9a();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
new file mode 100644
index 0000000..47b1c7a
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/1b0291.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleLevel_1b0291() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_1b0291();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleLevel_1b0291() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleLevel_1b0291() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..a7334dc
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/1bf73e.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_1bf73e() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_1bf73e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_1bf73e() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_1bf73e() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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: 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
new file mode 100644
index 0000000..ed4cb3f
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/302be4.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_302be4() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_302be4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_302be4() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_302be4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_302be4() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1862a92
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/47daa4.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_47daa4() {
+  float res = textureLod(arg_0, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_47daa4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_47daa4() {
+  float res = textureLod(arg_0, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_47daa4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_47daa4() {
+  float res = textureLod(arg_0, vec2(0.0f, 0.0f), 0, ivec2(0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_47daa4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : no matching overloaded function found 
+ERROR: 0:8: '' : 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
new file mode 100644
index 0000000..a6d8d40
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/690d95.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_690d95() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_690d95();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_690d95() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_690d95();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_690d95() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_690d95();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
new file mode 100644
index 0000000..606f345
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_979816() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 0.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_979816();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_979816() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 0.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_979816();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_979816() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 0.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..f35b44f
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/9bd37b.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleLevel_9bd37b() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_9bd37b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleLevel_9bd37b() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_9bd37b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleLevel_9bd37b() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f, ivec3(0, 0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_9bd37b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
new file mode 100644
index 0000000..7e5d37e
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/a4af26.wgsl.expected.glsl
@@ -0,0 +1,106 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_a4af26() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_a4af26();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_a4af26() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_a4af26();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_a4af26() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 1.0f, ivec2(0, 0));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_a4af26();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : 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: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
new file mode 100644
index 0000000..446ff45
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/abfcc0.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleLevel_abfcc0() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_abfcc0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleLevel_abfcc0() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_abfcc0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D arg_0;
+
+
+void textureSampleLevel_abfcc0() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ed66944
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/ae5e39.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleLevel_ae5e39() {
+  float res = textureLod(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_ae5e39();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleLevel_ae5e39() {
+  float res = textureLod(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_ae5e39();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray arg_0;
+
+
+void textureSampleLevel_ae5e39() {
+  float res = textureLod(arg_0, vec4(0.0f, 0.0f, 0.0f, float(1)), 0).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_ae5e39();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
new file mode 100644
index 0000000..4940678
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/ba93b3.wgsl.expected.glsl
@@ -0,0 +1,103 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_ba93b3() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_ba93b3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_ba93b3() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_ba93b3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray arg_0;
+
+
+void textureSampleLevel_ba93b3() {
+  float res = textureLod(arg_0, vec3(0.0f, 0.0f, float(1)), 0, ivec2(0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureSampleLevel_ba93b3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureLod' : no matching overloaded function found 
+ERROR: 0:8: '' : 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
new file mode 100644
index 0000000..538222d
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/c32df7.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleLevel_c32df7() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_c32df7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleLevel_c32df7() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_c32df7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube arg_0;
+
+
+void textureSampleLevel_c32df7() {
+  vec4 res = textureLod(arg_0, vec3(0.0f, 0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..7f18f4d
--- /dev/null
+++ b/test/intrinsics/gen/textureSampleLevel/c6aca6.wgsl.expected.glsl
@@ -0,0 +1,80 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_c6aca6() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureSampleLevel_c6aca6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_c6aca6() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureSampleLevel_c6aca6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D arg_0;
+
+
+void textureSampleLevel_c6aca6() {
+  vec4 res = textureLod(arg_0, vec2(0.0f, 0.0f), 1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..4ba2dce
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/05ce15.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_05ce15() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_05ce15();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_05ce15() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_05ce15();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_05ce15() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_05ce15();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
new file mode 100644
index 0000000..5cd1fc8
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/064c7f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_064c7f() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_064c7f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_064c7f() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_064c7f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_064c7f() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_064c7f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
new file mode 100644
index 0000000..8178bbf
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/068641.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_068641() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_068641();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_068641() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_068641();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_068641() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_068641();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
new file mode 100644
index 0000000..e2680e9
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/0af6b5.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_0af6b5() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_0af6b5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_0af6b5() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_0af6b5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_0af6b5() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_0af6b5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
new file mode 100644
index 0000000..a28d08e
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/0c3dff.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_0c3dff() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_0c3dff();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_0c3dff() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_0c3dff();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_0c3dff() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_0c3dff();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
new file mode 100644
index 0000000..d43d1e1
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/102722.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_102722() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_102722();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_102722() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_102722();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_102722() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_102722();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
new file mode 100644
index 0000000..9ad8bb9
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/1bbd08.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_1bbd08() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_1bbd08();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_1bbd08() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_1bbd08();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_1bbd08() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_1bbd08();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
new file mode 100644
index 0000000..26e7eb8
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/1c02e7.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_1c02e7() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_1c02e7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_1c02e7() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_1c02e7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_1c02e7() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_1c02e7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
new file mode 100644
index 0000000..5993ef4
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/22d955.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_22d955() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_22d955();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_22d955() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_22d955();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_22d955() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_22d955();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
new file mode 100644
index 0000000..6d3a252
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/26bf70.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_26bf70() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_26bf70();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_26bf70() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_26bf70();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_26bf70() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_26bf70();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
new file mode 100644
index 0000000..f44fdf0
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/2796b4.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_2796b4() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_2796b4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_2796b4() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_2796b4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_2796b4() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_2796b4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
new file mode 100644
index 0000000..62095fd
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/2ac6c7.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2ac6c7() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_2ac6c7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2ac6c7() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_2ac6c7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2ac6c7() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_2ac6c7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
new file mode 100644
index 0000000..39e2f5f
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/2eb2a4.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2eb2a4() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_2eb2a4();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2eb2a4() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_2eb2a4();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2eb2a4() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_2eb2a4();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
new file mode 100644
index 0000000..3a9e59e
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/2ed2a3.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2ed2a3() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_2ed2a3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2ed2a3() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_2ed2a3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_2ed2a3() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_2ed2a3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
new file mode 100644
index 0000000..3757584
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/31745b.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_31745b() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_31745b();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_31745b() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_31745b();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_31745b() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_31745b();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
new file mode 100644
index 0000000..5f404a8
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/32f368.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_32f368() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_32f368();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_32f368() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_32f368();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_32f368() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_32f368();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
new file mode 100644
index 0000000..e3ebdab
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/331aee.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_331aee() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_331aee();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_331aee() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_331aee();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_331aee() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_331aee();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
new file mode 100644
index 0000000..75832fe
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/38e8d7.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_38e8d7() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_38e8d7();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_38e8d7() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_38e8d7();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_38e8d7() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_38e8d7();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
new file mode 100644
index 0000000..6ee011b
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/3a52ac.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_3a52ac() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_3a52ac();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_3a52ac() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_3a52ac();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_3a52ac() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_3a52ac();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
new file mode 100644
index 0000000..f3fdbe6
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/3bb7a1.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_3bb7a1() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_3bb7a1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_3bb7a1() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_3bb7a1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_3bb7a1() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_3bb7a1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
new file mode 100644
index 0000000..343d087
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/3bec15.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_3bec15() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_3bec15();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_3bec15() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_3bec15();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_3bec15() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_3bec15();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
new file mode 100644
index 0000000..f54d419
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/441ba8.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_441ba8() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_441ba8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_441ba8() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_441ba8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_441ba8() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_441ba8();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
new file mode 100644
index 0000000..a13a1aa
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/4fc057.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_4fc057() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_4fc057();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_4fc057() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_4fc057();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_4fc057() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_4fc057();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
new file mode 100644
index 0000000..facb619
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/5a2f8f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_5a2f8f() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_5a2f8f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_5a2f8f() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_5a2f8f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_5a2f8f() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_5a2f8f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
new file mode 100644
index 0000000..4c82be7
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/60975f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_60975f() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_60975f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_60975f() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_60975f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_60975f() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_60975f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
new file mode 100644
index 0000000..2e03766
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/682fd6.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_682fd6() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_682fd6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_682fd6() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_682fd6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_682fd6() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_682fd6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
new file mode 100644
index 0000000..1908674
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/6b75c3.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_6b75c3() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_6b75c3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_6b75c3() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_6b75c3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_6b75c3() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_6b75c3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
new file mode 100644
index 0000000..35dbe8f
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/6b80d2.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_6b80d2() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_6b80d2();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_6b80d2() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_6b80d2();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_6b80d2() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_6b80d2();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
new file mode 100644
index 0000000..c6e0183
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/6cff2e.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_6cff2e() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_6cff2e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_6cff2e() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_6cff2e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_6cff2e() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_6cff2e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
new file mode 100644
index 0000000..173ab8b
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/6da692.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_6da692() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_6da692();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_6da692() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_6da692();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_6da692() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_6da692();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
new file mode 100644
index 0000000..97d4a2c
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/731349.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_731349() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_731349();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_731349() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_731349();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_731349() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_731349();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
new file mode 100644
index 0000000..7456a69
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/752da6.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_752da6() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_752da6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_752da6() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_752da6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_752da6() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_752da6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
new file mode 100644
index 0000000..cfd2c34
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/77c0ae.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_77c0ae() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_77c0ae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_77c0ae() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_77c0ae();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_77c0ae() {
+  imageStore(arg_0, ivec2(0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_77c0ae();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
new file mode 100644
index 0000000..cad1e7b
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/7cec8d.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_7cec8d() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_7cec8d();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_7cec8d() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_7cec8d();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_7cec8d() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_7cec8d();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
new file mode 100644
index 0000000..f11342c
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/7f7fae.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_7f7fae() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_7f7fae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_7f7fae() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_7f7fae();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_7f7fae() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_7f7fae();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
new file mode 100644
index 0000000..4cde48c
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/804942.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_804942() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_804942();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_804942() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_804942();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_804942() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_804942();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
new file mode 100644
index 0000000..2c886bc
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/805dae.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_805dae() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_805dae();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_805dae() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_805dae();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_805dae() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_805dae();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
new file mode 100644
index 0000000..a637a68
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/83bcc1.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_83bcc1() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_83bcc1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_83bcc1() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_83bcc1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_83bcc1() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_83bcc1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
new file mode 100644
index 0000000..d134a09
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/872747.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_872747() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_872747();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_872747() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_872747();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_872747() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_872747();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
new file mode 100644
index 0000000..983cf26
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/8e0479.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_8e0479() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_8e0479();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_8e0479() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_8e0479();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_8e0479() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_8e0479();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
new file mode 100644
index 0000000..1b2ac3f
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/8f71a1.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_8f71a1() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_8f71a1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_8f71a1() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_8f71a1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_8f71a1() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_8f71a1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
new file mode 100644
index 0000000..c2885e6
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/969534.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_969534() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_969534();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_969534() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_969534();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_969534() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_969534();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
new file mode 100644
index 0000000..b926142
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/9a3ecc.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_9a3ecc() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_9a3ecc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_9a3ecc() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_9a3ecc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_9a3ecc() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_9a3ecc();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
new file mode 100644
index 0000000..81b5fd3
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/9d9cd5.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_9d9cd5() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_9d9cd5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_9d9cd5() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_9d9cd5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_9d9cd5() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_9d9cd5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
new file mode 100644
index 0000000..535d561
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/9e3ec5.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_9e3ec5() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_9e3ec5();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_9e3ec5() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_9e3ec5();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_9e3ec5() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_9e3ec5();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
new file mode 100644
index 0000000..675296b
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/ac67aa.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ac67aa() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_ac67aa();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ac67aa() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_ac67aa();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ac67aa() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_ac67aa();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
new file mode 100644
index 0000000..3acec7e
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/b706b1.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_b706b1() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_b706b1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_b706b1() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_b706b1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_b706b1() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_b706b1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
new file mode 100644
index 0000000..20c0646
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/bbcb7f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_bbcb7f() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_bbcb7f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_bbcb7f() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_bbcb7f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_bbcb7f() {
+  imageStore(arg_0, ivec2(0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_bbcb7f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
new file mode 100644
index 0000000..e7ea527
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/be6e30.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_be6e30() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_be6e30();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_be6e30() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_be6e30();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D arg_0;
+
+void textureStore_be6e30() {
+  imageStore(arg_0, ivec2(0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_be6e30();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
new file mode 100644
index 0000000..7623f03
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/bf775c.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_bf775c() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_bf775c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_bf775c() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_bf775c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_bf775c() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_bf775c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
new file mode 100644
index 0000000..8a3f3c8
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/c5af1e.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_c5af1e() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_c5af1e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_c5af1e() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_c5af1e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_c5af1e() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_c5af1e();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
new file mode 100644
index 0000000..385f01f
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/c863be.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_c863be() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_c863be();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_c863be() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_c863be();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_c863be() {
+  imageStore(arg_0, ivec3(0, 0, 1), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_c863be();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
new file mode 100644
index 0000000..4273b57
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/d73b5c.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_d73b5c() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_d73b5c();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_d73b5c() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_d73b5c();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_d73b5c() {
+  imageStore(arg_0, 1, ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_d73b5c();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
new file mode 100644
index 0000000..7e56ff4
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/dd7d81.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_dd7d81() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_dd7d81();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_dd7d81() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_dd7d81();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_dd7d81() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_dd7d81();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
new file mode 100644
index 0000000..bc857ff
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/dde364.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_dde364() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_dde364();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_dde364() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_dde364();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_dde364() {
+  imageStore(arg_0, ivec3(0, 0, 1), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_dde364();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
new file mode 100644
index 0000000..8b379de
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/e885e8.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_e885e8() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_e885e8();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_e885e8() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_e885e8();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_e885e8() {
+  imageStore(arg_0, 1, vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_e885e8();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
new file mode 100644
index 0000000..1108c67
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/eb702f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_eb702f() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_eb702f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_eb702f() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_eb702f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_eb702f() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_eb702f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
new file mode 100644
index 0000000..c009898
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/eb78b9.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_eb78b9() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_eb78b9();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_eb78b9() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_eb78b9();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_eb78b9() {
+  imageStore(arg_0, ivec3(0, 0, 0), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_eb78b9();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
new file mode 100644
index 0000000..fe34058
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/ee6acc.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ee6acc() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_ee6acc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ee6acc() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_ee6acc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ee6acc() {
+  imageStore(arg_0, ivec3(0, 0, 0), vec4(0.0f, 0.0f, 0.0f, 0.0f)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_ee6acc();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'x' : does not apply to this type:  global highp void
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
new file mode 100644
index 0000000..363aad9
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/ef9f2f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ef9f2f() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_ef9f2f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ef9f2f() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_ef9f2f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_ef9f2f() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_ef9f2f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
new file mode 100644
index 0000000..6ca19cd
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/f8dead.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_f8dead() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_f8dead();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_f8dead() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_f8dead();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D arg_0;
+
+void textureStore_f8dead() {
+  imageStore(arg_0, ivec3(0, 0, 0), uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_f8dead();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
new file mode 100644
index 0000000..5bbfedc
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/f9be83.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_f9be83() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_f9be83();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_f9be83() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_f9be83();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_f9be83() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_f9be83();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
new file mode 100644
index 0000000..a85cf19
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/fb9a8f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_fb9a8f() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_fb9a8f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_fb9a8f() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_fb9a8f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D arg_0;
+
+void textureStore_fb9a8f() {
+  imageStore(arg_0, 1, uvec4(0u, 0u, 0u, 0u)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_fb9a8f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
new file mode 100644
index 0000000..9f27edc
--- /dev/null
+++ b/test/intrinsics/gen/textureStore/fbf53f.wgsl.expected.glsl
@@ -0,0 +1,100 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_fbf53f() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  textureStore_fbf53f();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_fbf53f() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  textureStore_fbf53f();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray arg_0;
+
+void textureStore_fbf53f() {
+  imageStore(arg_0, ivec3(0, 0, 1), ivec4(0, 0, 0, 0)).x;
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  textureStore_fbf53f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:7: 'imageStore' : no matching overloaded function found 
+ERROR: 0:7: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
new file mode 100644
index 0000000..e53ed26
--- /dev/null
+++ b/test/intrinsics/gen/transpose/2585cd.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_2585cd() {
+  mat3x4 res = transpose(mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_2585cd();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_2585cd() {
+  mat3x4 res = transpose(mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_2585cd();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_2585cd() {
+  mat3x4 res = transpose(mat4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..94c6b80
--- /dev/null
+++ b/test/intrinsics/gen/transpose/31d679.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_31d679() {
+  mat2 res = transpose(mat2(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_31d679();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_31d679() {
+  mat2 res = transpose(mat2(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_31d679();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_31d679() {
+  mat2 res = transpose(mat2(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..84e5407
--- /dev/null
+++ b/test/intrinsics/gen/transpose/31e37e.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_31e37e() {
+  mat2x4 res = transpose(mat4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_31e37e();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_31e37e() {
+  mat2x4 res = transpose(mat4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_31e37e();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_31e37e() {
+  mat2x4 res = transpose(mat4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..a03fa51
--- /dev/null
+++ b/test/intrinsics/gen/transpose/4ce359.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_4ce359() {
+  mat4x2 res = transpose(mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_4ce359();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_4ce359() {
+  mat4x2 res = transpose(mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_4ce359();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_4ce359() {
+  mat4x2 res = transpose(mat2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..1597888
--- /dev/null
+++ b/test/intrinsics/gen/transpose/4dc9a1.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_4dc9a1() {
+  mat3x2 res = transpose(mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_4dc9a1();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_4dc9a1() {
+  mat3x2 res = transpose(mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_4dc9a1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_4dc9a1() {
+  mat3x2 res = transpose(mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..155bd35
--- /dev/null
+++ b/test/intrinsics/gen/transpose/854336.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_854336() {
+  mat3 res = transpose(mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_854336();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_854336() {
+  mat3 res = transpose(mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_854336();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_854336() {
+  mat3 res = transpose(mat3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..682578a
--- /dev/null
+++ b/test/intrinsics/gen/transpose/c1b600.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_c1b600() {
+  mat4 res = transpose(mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_c1b600();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_c1b600() {
+  mat4 res = transpose(mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_c1b600();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_c1b600() {
+  mat4 res = transpose(mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..86e5480
--- /dev/null
+++ b/test/intrinsics/gen/transpose/d8f8ba.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_d8f8ba() {
+  mat4x3 res = transpose(mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_d8f8ba();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_d8f8ba() {
+  mat4x3 res = transpose(mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_d8f8ba();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_d8f8ba() {
+  mat4x3 res = transpose(mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ae64003
--- /dev/null
+++ b/test/intrinsics/gen/transpose/ed4bdc.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void transpose_ed4bdc() {
+  mat2x3 res = transpose(mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  transpose_ed4bdc();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_ed4bdc() {
+  mat2x3 res = transpose(mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  transpose_ed4bdc();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void transpose_ed4bdc() {
+  mat2x3 res = transpose(mat3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..ff3f6b2
--- /dev/null
+++ b/test/intrinsics/gen/trunc/562d05.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void trunc_562d05() {
+  vec3 res = trunc(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  trunc_562d05();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_562d05() {
+  vec3 res = trunc(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  trunc_562d05();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_562d05() {
+  vec3 res = trunc(vec3(0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..cd8db12
--- /dev/null
+++ b/test/intrinsics/gen/trunc/e183aa.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void trunc_e183aa() {
+  vec4 res = trunc(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  trunc_e183aa();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_e183aa() {
+  vec4 res = trunc(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  trunc_e183aa();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_e183aa() {
+  vec4 res = trunc(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..d809fe8
--- /dev/null
+++ b/test/intrinsics/gen/trunc/eb83df.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void trunc_eb83df() {
+  float res = trunc(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  trunc_eb83df();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_eb83df() {
+  float res = trunc(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  trunc_eb83df();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_eb83df() {
+  float res = trunc(1.0f);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..32ce843
--- /dev/null
+++ b/test/intrinsics/gen/trunc/f370d3.wgsl.expected.glsl
@@ -0,0 +1,71 @@
+#version 310 es
+precision mediump float;
+
+void trunc_f370d3() {
+  vec2 res = trunc(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  trunc_f370d3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_f370d3() {
+  vec2 res = trunc(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  trunc_f370d3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void trunc_f370d3() {
+  vec2 res = trunc(vec2(0.0f, 0.0f));
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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
new file mode 100644
index 0000000..76beac1
--- /dev/null
+++ b/test/intrinsics/gen/unpack2x16float/32a5cf.wgsl.expected.glsl
@@ -0,0 +1,112 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16float(uint param_0) {
+  uint i = param_0;
+  return f16tof32(uint2(i & 0xffff, i >> 16));
+}
+
+
+void unpack2x16float_32a5cf() {
+  vec2 res = tint_unpack2x16float(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  unpack2x16float_32a5cf();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16float(uint param_0) {
+  uint i = param_0;
+  return f16tof32(uint2(i & 0xffff, i >> 16));
+}
+
+
+void unpack2x16float_32a5cf() {
+  vec2 res = tint_unpack2x16float(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16float(uint param_0) {
+  uint i = param_0;
+  return f16tof32(uint2(i & 0xffff, i >> 16));
+}
+
+
+void unpack2x16float_32a5cf() {
+  vec2 res = tint_unpack2x16float(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  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 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
new file mode 100644
index 0000000..babc3da
--- /dev/null
+++ b/test/intrinsics/gen/unpack2x16snorm/b4aea6.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16snorm(uint param_0) {
+  int j = int(param_0);
+  int2 i = int2(j << 16, j) >> 16;
+  return clamp(float2(i) / 32767.0, -1.0, 1.0);
+}
+
+
+void unpack2x16snorm_b4aea6() {
+  vec2 res = tint_unpack2x16snorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  unpack2x16snorm_b4aea6();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'int2' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16snorm(uint param_0) {
+  int j = int(param_0);
+  int2 i = int2(j << 16, j) >> 16;
+  return clamp(float2(i) / 32767.0, -1.0, 1.0);
+}
+
+
+void unpack2x16snorm_b4aea6() {
+  vec2 res = tint_unpack2x16snorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  unpack2x16snorm_b4aea6();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'int2' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16snorm(uint param_0) {
+  int j = int(param_0);
+  int2 i = int2(j << 16, j) >> 16;
+  return clamp(float2(i) / 32767.0, -1.0, 1.0);
+}
+
+
+void unpack2x16snorm_b4aea6() {
+  vec2 res = tint_unpack2x16snorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  unpack2x16snorm_b4aea6();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'int2' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
new file mode 100644
index 0000000..7fe0e54
--- /dev/null
+++ b/test/intrinsics/gen/unpack2x16unorm/7699c0.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16unorm(uint param_0) {
+  uint j = param_0;
+  uint2 i = uint2(j & 0xffff, j >> 16);
+  return float2(i) / 65535.0;
+}
+
+
+void unpack2x16unorm_7699c0() {
+  vec2 res = tint_unpack2x16unorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  unpack2x16unorm_7699c0();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'uint2' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16unorm(uint param_0) {
+  uint j = param_0;
+  uint2 i = uint2(j & 0xffff, j >> 16);
+  return float2(i) / 65535.0;
+}
+
+
+void unpack2x16unorm_7699c0() {
+  vec2 res = tint_unpack2x16unorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  unpack2x16unorm_7699c0();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'uint2' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec2 tint_unpack2x16unorm(uint param_0) {
+  uint j = param_0;
+  uint2 i = uint2(j & 0xffff, j >> 16);
+  return float2(i) / 65535.0;
+}
+
+
+void unpack2x16unorm_7699c0() {
+  vec2 res = tint_unpack2x16unorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  unpack2x16unorm_7699c0();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'uint2' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
new file mode 100644
index 0000000..b27d4c7
--- /dev/null
+++ b/test/intrinsics/gen/unpack4x8snorm/523fb3.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec4 tint_unpack4x8snorm(uint param_0) {
+  int j = int(param_0);
+  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
+  return clamp(float4(i) / 127.0, -1.0, 1.0);
+}
+
+
+void unpack4x8snorm_523fb3() {
+  vec4 res = tint_unpack4x8snorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  unpack4x8snorm_523fb3();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'int4' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec4 tint_unpack4x8snorm(uint param_0) {
+  int j = int(param_0);
+  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
+  return clamp(float4(i) / 127.0, -1.0, 1.0);
+}
+
+
+void unpack4x8snorm_523fb3() {
+  vec4 res = tint_unpack4x8snorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  unpack4x8snorm_523fb3();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'int4' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec4 tint_unpack4x8snorm(uint param_0) {
+  int j = int(param_0);
+  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
+  return clamp(float4(i) / 127.0, -1.0, 1.0);
+}
+
+
+void unpack4x8snorm_523fb3() {
+  vec4 res = tint_unpack4x8snorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  unpack4x8snorm_523fb3();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'int4' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
new file mode 100644
index 0000000..cb08c88
--- /dev/null
+++ b/test/intrinsics/gen/unpack4x8unorm/750c74.wgsl.expected.glsl
@@ -0,0 +1,115 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+vec4 tint_unpack4x8unorm(uint param_0) {
+  uint j = param_0;
+  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
+  return float4(i) / 255.0;
+}
+
+
+void unpack4x8unorm_750c74() {
+  vec4 res = tint_unpack4x8unorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+vec4 vertex_main_inner() {
+  unpack4x8unorm_750c74();
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol vertex_main() {
+  vec4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = tint_symbol(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'uint4' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec4 tint_unpack4x8unorm(uint param_0) {
+  uint j = param_0;
+  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
+  return float4(i) / 255.0;
+}
+
+
+void unpack4x8unorm_750c74() {
+  vec4 res = tint_unpack4x8unorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+void fragment_main() {
+  unpack4x8unorm_750c74();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'uint4' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+vec4 tint_unpack4x8unorm(uint param_0) {
+  uint j = param_0;
+  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
+  return float4(i) / 255.0;
+}
+
+
+void unpack4x8unorm_750c74() {
+  vec4 res = tint_unpack4x8unorm(1u);
+}
+
+struct tint_symbol {
+  vec4 value;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  unpack4x8unorm_750c74();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:6: 'uint4' : undeclared identifier 
+ERROR: 0:6: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
new file mode 100644
index 0000000..d923b6d
--- /dev/null
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+void workgroupBarrier_a17f7f() {
+  GroupMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  workgroupBarrier_a17f7f();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'GroupMemoryBarrierWithGroupSync' : no matching overloaded function found 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/ignore/call.wgsl.expected.glsl b/test/intrinsics/ignore/call.wgsl.expected.glsl
new file mode 100644
index 0000000..ce8e2b7
--- /dev/null
+++ b/test/intrinsics/ignore/call.wgsl.expected.glsl
@@ -0,0 +1,21 @@
+intrinsics/ignore/call.wgsl:7:5 warning: use of deprecated intrinsic
+    ignore(f(1, 2, 3));
+    ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+int f(int a, int b, int c) {
+  return ((a * b) + c);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  f(1, 2, 3);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl b/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl
new file mode 100644
index 0000000..1848860
--- /dev/null
+++ b/test/intrinsics/ignore/runtime_array.wgsl.expected.glsl
@@ -0,0 +1,22 @@
+intrinsics/ignore/runtime_array.wgsl:10:5 warning: use of deprecated intrinsic
+    ignore(s.arr);
+    ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int arr[];
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  s.arr;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl b/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl
new file mode 100644
index 0000000..2571ad5
--- /dev/null
+++ b/test/intrinsics/ignore/storage_buffer.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+intrinsics/ignore/storage_buffer.wgsl:10:5 warning: use of deprecated intrinsic
+    ignore(s);
+    ^^^^^^
+
+intrinsics/ignore/storage_buffer.wgsl:11:5 warning: use of deprecated intrinsic
+    ignore(s.i);
+    ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int i;
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  s;
+  s.i;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl
new file mode 100644
index 0000000..9ed6461
--- /dev/null
+++ b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+intrinsics/ignore/uniform_buffer.wgsl:10:5 warning: use of deprecated intrinsic
+    ignore(u);
+    ^^^^^^
+
+intrinsics/ignore/uniform_buffer.wgsl:11:5 warning: use of deprecated intrinsic
+    ignore(u.i);
+    ^^^^^^
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  int i;
+} u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  u;
+  u.i;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/intrinsics/modf.wgsl.expected.glsl b/test/intrinsics/modf.wgsl.expected.glsl
new file mode 100644
index 0000000..82a4213
--- /dev/null
+++ b/test/intrinsics/modf.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct modf_result {
+  float fract;
+  float whole;
+};
+modf_result tint_modf(float param_0) {
+  float whole;
+  float fract = modf(param_0, whole);
+  modf_result result = {fract, whole};
+  return result;
+}
+
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  modf_result res = tint_modf(1.230000019f);
+  float tint_symbol_1 = res.fract;
+  float whole = res.whole;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:11: '{ } style initializers' : not supported with this profile: es
+ERROR: 0:11: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/radians.spvasm.expected.glsl b/test/intrinsics/radians.spvasm.expected.glsl
new file mode 100644
index 0000000..b96f0c4
--- /dev/null
+++ b/test/intrinsics/radians.spvasm.expected.glsl
@@ -0,0 +1,21 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  float a = 0.0f;
+  float b = 0.0f;
+  a = 42.0f;
+  b = (a * 0.017453292f);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/intrinsics/repeated_use.wgsl.expected.glsl b/test/intrinsics/repeated_use.wgsl.expected.glsl
new file mode 100644
index 0000000..51cea44
--- /dev/null
+++ b/test/intrinsics/repeated_use.wgsl.expected.glsl
@@ -0,0 +1,58 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+bvec4 tint_isNormal(vec4 param_0) {
+  uint4 exponent = asuint(param_0) & 0x7f80000;
+  uint4 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+bvec3 tint_isNormal_1(vec3 param_0) {
+  uint3 exponent = asuint(param_0) & 0x7f80000;
+  uint3 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+bvec2 tint_isNormal_2(vec2 param_0) {
+  uint2 exponent = asuint(param_0) & 0x7f80000;
+  uint2 clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+bool tint_isNormal_3(float param_0) {
+  uint exponent = asuint(param_0) & 0x7f80000;
+  uint clamped = clamp(exponent, 0x0080000, 0x7f00000);
+  return clamped == exponent;
+}
+
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  tint_isNormal(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  tint_isNormal(vec4((1.0f).xxxx));
+  tint_isNormal(vec4(1.0f, 2.0f, 3.0f, 4.0f));
+  tint_isNormal_1(vec3(0.0f, 0.0f, 0.0f));
+  tint_isNormal_1(vec3((1.0f).xxx));
+  tint_isNormal_1(vec3(1.0f, 2.0f, 3.0f));
+  tint_isNormal_2(vec2(0.0f, 0.0f));
+  tint_isNormal_2(vec2((1.0f).xx));
+  tint_isNormal_2(vec2(1.0f, 2.0f));
+  tint_isNormal_3(1.0f);
+  tint_isNormal_3(2.0f);
+  tint_isNormal_3(3.0f);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: 'uint4' : undeclared identifier 
+ERROR: 0:5: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl
new file mode 100644
index 0000000..490cd99
--- /dev/null
+++ b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.glsl
@@ -0,0 +1,118 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+vec4 tint_symbol_1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void textureDimensions_f60bdb() {
+  ivec2 res = ivec2(0, 0);
+  ivec2 x_16 = ivec2(textureSize(arg_0));
+  res = x_16;
+  return;
+}
+
+void tint_symbol_2(vec4 tint_symbol) {
+  tint_symbol_1 = tint_symbol;
+  return;
+}
+
+void vertex_main_1() {
+  textureDimensions_f60bdb();
+  tint_symbol_2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+vertex_main_out vertex_main_inner() {
+  vertex_main_1();
+  vertex_main_out tint_symbol_4 = vertex_main_out(tint_symbol_1);
+  return tint_symbol_4;
+}
+
+tint_symbol_3 vertex_main() {
+  vertex_main_out inner_result = vertex_main_inner();
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.tint_symbol_1_1 = inner_result.tint_symbol_1_1;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_3 outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.tint_symbol_1_1;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_f60bdb() {
+  ivec2 res = ivec2(0, 0);
+  ivec2 x_16 = ivec2(textureSize(arg_0));
+  res = x_16;
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+void fragment_main_1() {
+  textureDimensions_f60bdb();
+  return;
+}
+
+void fragment_main() {
+  fragment_main_1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureDimensions_f60bdb() {
+  ivec2 res = ivec2(0, 0);
+  ivec2 x_16 = ivec2(textureSize(arg_0));
+  res = x_16;
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+void compute_main_1() {
+  textureDimensions_f60bdb();
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  compute_main_1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
diff --git a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl
new file mode 100644
index 0000000..0634d3f
--- /dev/null
+++ b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.glsl
@@ -0,0 +1,141 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+vec4 tint_symbol_1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void textureLoad_6273b1() {
+  float res = 0.0f;
+  vec4 x_17 = vec4(texelFetch(arg_0, ivec3(0, 0, 0), 1).x, 0.0f, 0.0f, 0.0f);
+  res = x_17.x;
+  return;
+}
+
+void tint_symbol_2(vec4 tint_symbol) {
+  tint_symbol_1 = tint_symbol;
+  return;
+}
+
+void vertex_main_1() {
+  textureLoad_6273b1();
+  tint_symbol_2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+vertex_main_out vertex_main_inner() {
+  vertex_main_1();
+  vertex_main_out tint_symbol_4 = vertex_main_out(tint_symbol_1);
+  return tint_symbol_4;
+}
+
+tint_symbol_3 vertex_main() {
+  vertex_main_out inner_result = vertex_main_inner();
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.tint_symbol_1_1 = inner_result.tint_symbol_1_1;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_3 outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.tint_symbol_1_1;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_6273b1() {
+  float res = 0.0f;
+  vec4 x_17 = vec4(texelFetch(arg_0, ivec3(0, 0, 0), 1).x, 0.0f, 0.0f, 0.0f);
+  res = x_17.x;
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+void fragment_main_1() {
+  textureLoad_6273b1();
+  return;
+}
+
+void fragment_main() {
+  fragment_main_1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureLoad_6273b1() {
+  float res = 0.0f;
+  vec4 x_17 = vec4(texelFetch(arg_0, ivec3(0, 0, 0), 1).x, 0.0f, 0.0f, 0.0f);
+  res = x_17.x;
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+void compute_main_1() {
+  textureLoad_6273b1();
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  compute_main_1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'texelFetch' : no matching overloaded function found 
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl
new file mode 100644
index 0000000..dab32c8
--- /dev/null
+++ b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.glsl
@@ -0,0 +1,144 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+vec4 tint_symbol_1 = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void textureNumSamples_a3c8a0() {
+  int res = 0;
+  int x_16 = textureSamples(arg_0);;
+  res = x_16;
+  return;
+}
+
+void tint_symbol_2(vec4 tint_symbol) {
+  tint_symbol_1 = tint_symbol;
+  return;
+}
+
+void vertex_main_1() {
+  textureNumSamples_a3c8a0();
+  tint_symbol_2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+vertex_main_out vertex_main_inner() {
+  vertex_main_1();
+  vertex_main_out tint_symbol_4 = vertex_main_out(tint_symbol_1);
+  return tint_symbol_4;
+}
+
+tint_symbol_3 vertex_main() {
+  vertex_main_out inner_result = vertex_main_inner();
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.tint_symbol_1_1 = inner_result.tint_symbol_1_1;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_3 outputs;
+  outputs = vertex_main();
+  gl_Position = outputs.tint_symbol_1_1;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:9: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:9: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_a3c8a0() {
+  int res = 0;
+  int x_16 = textureSamples(arg_0);;
+  res = x_16;
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+void fragment_main_1() {
+  textureNumSamples_a3c8a0();
+  return;
+}
+
+void fragment_main() {
+  fragment_main_1();
+  return;
+}
+void main() {
+  fragment_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp mediump int'
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS arg_0;
+
+void textureNumSamples_a3c8a0() {
+  int res = 0;
+  int x_16 = textureSamples(arg_0);;
+  res = x_16;
+  return;
+}
+
+struct vertex_main_out {
+  vec4 tint_symbol_1_1;
+};
+struct tint_symbol_3 {
+  vec4 tint_symbol_1_1;
+};
+
+void compute_main_1() {
+  textureNumSamples_a3c8a0();
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void compute_main() {
+  compute_main_1();
+  return;
+}
+void main() {
+  compute_main();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:8: 'textureSamples' : no matching overloaded function found 
+ERROR: 0:8: '=' :  cannot convert from ' const float' to ' temp highp int'
+ERROR: 0:8: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/layout/storage/mat2x2/f32.wgsl.expected.glsl b/test/layout/storage/mat2x2/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..3859a1d
--- /dev/null
+++ b/test/layout/storage/mat2x2/f32.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer SSBO_1 {
+  mat2 m;
+} ssbo;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  mat2 v = ssbo.m;
+  ssbo.m = v;
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl b/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl
new file mode 100644
index 0000000..5b84d7f
--- /dev/null
+++ b/test/layout/storage/mat2x2/stride/16.spvasm.expected.glsl
@@ -0,0 +1,36 @@
+#version 310 es
+precision mediump float;
+
+struct tint_padded_array_element {
+  vec2 el;
+};
+
+layout (binding = 0) buffer SSBO_1 {
+  tint_padded_array_element m[2];
+} ssbo;
+
+mat2 arr_to_mat2x2_stride_16(tint_padded_array_element arr[2]) {
+  return mat2(arr[0u].el, arr[1u].el);
+}
+
+tint_padded_array_element[2] mat2x2_stride_16_to_arr(mat2 mat) {
+  tint_padded_array_element tint_symbol[2] = tint_padded_array_element[2](tint_padded_array_element(mat[0u]), tint_padded_array_element(mat[1u]));
+  return tint_symbol;
+}
+
+void f_1() {
+  mat2 x_15 = arr_to_mat2x2_stride_16(ssbo.m);
+  ssbo.m = mat2x2_stride_16_to_arr(x_15);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  f_1();
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/let/global/global.wgsl.expected.glsl b/test/let/global/global.wgsl.expected.glsl
new file mode 100644
index 0000000..daeec49
--- /dev/null
+++ b/test/let/global/global.wgsl.expected.glsl
@@ -0,0 +1,39 @@
+#version 310 es
+precision mediump float;
+
+struct MyStruct {
+  float f1;
+};
+
+const int v1 = 1;
+const uint v2 = 1u;
+const float v3 = 1.0f;
+const ivec3 v4 = ivec3(1, 1, 1);
+const uvec3 v5 = uvec3(1u, 1u, 1u);
+const vec3 v6 = vec3(1.0f, 1.0f, 1.0f);
+const mat3 v7 = mat3(vec3(1.0f, 1.0f, 1.0f), vec3(1.0f, 1.0f, 1.0f), vec3(1.0f, 1.0f, 1.0f));
+const MyStruct v8 = MyStruct(0.0f);
+const float v9[10] = float[10](0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+out vec4 value;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  value = outputs.value;
+}
+
+
diff --git a/test/let/inferred/function.wgsl.expected.glsl b/test/let/inferred/function.wgsl.expected.glsl
new file mode 100644
index 0000000..188a6da
--- /dev/null
+++ b/test/let/inferred/function.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+#version 310 es
+precision mediump float;
+
+struct MyStruct {
+  float f1;
+};
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+out vec4 value;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  value = outputs.value;
+}
+
+
diff --git a/test/loops/continue_in_switch.wgsl.expected.glsl b/test/loops/continue_in_switch.wgsl.expected.glsl
new file mode 100644
index 0000000..f339404
--- /dev/null
+++ b/test/loops/continue_in_switch.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  {
+    for(int i = 0; (i < 4); i = (i + 1)) {
+      switch(i) {
+        case 0: {
+          continue;
+          break;
+        }
+        default: {
+          break;
+        }
+      }
+    }
+  }
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/loops/loop.wgsl.expected.glsl b/test/loops/loop.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/loops/loop.wgsl.expected.glsl
diff --git a/test/loops/loop_with_continuing.wgsl.expected.glsl b/test/loops/loop_with_continuing.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/loops/loop_with_continuing.wgsl.expected.glsl
diff --git a/test/loops/nested_loops.wgsl.expected.glsl b/test/loops/nested_loops.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/loops/nested_loops.wgsl.expected.glsl
diff --git a/test/loops/nested_loops_with_continuing.wgsl.expected.glsl b/test/loops/nested_loops_with_continuing.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/loops/nested_loops_with_continuing.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat2x2.wgsl.expected.glsl b/test/matrix/constructor/elements/mat2x2.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat2x2.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat2x3.wgsl.expected.glsl b/test/matrix/constructor/elements/mat2x3.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat2x3.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat2x4.wgsl.expected.glsl b/test/matrix/constructor/elements/mat2x4.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat2x4.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat3x2.wgsl.expected.glsl b/test/matrix/constructor/elements/mat3x2.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat3x2.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat3x3.wgsl.expected.glsl b/test/matrix/constructor/elements/mat3x3.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat3x3.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat3x4.wgsl.expected.glsl b/test/matrix/constructor/elements/mat3x4.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat3x4.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat4x2.wgsl.expected.glsl b/test/matrix/constructor/elements/mat4x2.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat4x2.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat4x3.wgsl.expected.glsl b/test/matrix/constructor/elements/mat4x3.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat4x3.wgsl.expected.glsl
diff --git a/test/matrix/constructor/elements/mat4x4.wgsl.expected.glsl b/test/matrix/constructor/elements/mat4x4.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/matrix/constructor/elements/mat4x4.wgsl.expected.glsl
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.glsl b/test/ptr_ref/access/matrix.spvasm.expected.glsl
new file mode 100644
index 0000000..8528cd5
--- /dev/null
+++ b/test/ptr_ref/access/matrix.spvasm.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  mat3 m = mat3(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f));
+  m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  m[1] = vec3(5.0f, 5.0f, 5.0f);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/access/matrix.wgsl.expected.glsl b/test/ptr_ref/access/matrix.wgsl.expected.glsl
new file mode 100644
index 0000000..e76a7fd
--- /dev/null
+++ b/test/ptr_ref/access/matrix.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  mat3 m = mat3(vec3(1.0f, 2.0f, 3.0f), vec3(4.0f, 5.0f, 6.0f), vec3(7.0f, 8.0f, 9.0f));
+  m[1] = vec3(5.0f, 5.0f, 5.0f);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl
new file mode 100644
index 0000000..8c4e0ce
--- /dev/null
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  uint x_10 = 0u;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.glsl b/test/ptr_ref/load/global/i32.spvasm.expected.glsl
new file mode 100644
index 0000000..e3ffc25
--- /dev/null
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+int I = 0;
+
+void main_1() {
+  int x_11 = (I + 1);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/global/i32.wgsl.expected.glsl b/test/ptr_ref/load/global/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..1e87672
--- /dev/null
+++ b/test/ptr_ref/load/global/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+int I = 0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int use = (I + 1);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl
new file mode 100644
index 0000000..631eeb8
--- /dev/null
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.glsl
@@ -0,0 +1,26 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int i;
+};
+
+S V = S(0);
+
+void main_1() {
+  int i = 0;
+  int x_15 = V.i;
+  i = x_15;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl b/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl
new file mode 100644
index 0000000..5451a7a
--- /dev/null
+++ b/test/ptr_ref/load/global/struct_field.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int i;
+};
+
+S V = S(0);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int i = V.i;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.glsl b/test/ptr_ref/load/local/i32.spvasm.expected.glsl
new file mode 100644
index 0000000..848563f
--- /dev/null
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  int i = 0;
+  i = 123;
+  int x_12 = (i + 1);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/i32.wgsl.expected.glsl b/test/ptr_ref/load/local/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..87a16da
--- /dev/null
+++ b/test/ptr_ref/load/local/i32.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int i = 123;
+  int use = (i + 1);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl
new file mode 100644
index 0000000..87a16da
--- /dev/null
+++ b/test/ptr_ref/load/local/ptr_function.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int i = 123;
+  int use = (i + 1);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl
new file mode 100644
index 0000000..87e4b5e
--- /dev/null
+++ b/test/ptr_ref/load/local/ptr_private.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+int i = 123;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int use = (i + 1);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl
new file mode 100644
index 0000000..84dff04
--- /dev/null
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int a;
+} v;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int use = (v.a + 1);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl
new file mode 100644
index 0000000..9e4df2a
--- /dev/null
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  int a;
+} v;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int use = (v.a + 1);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
new file mode 100644
index 0000000..c27e6cd
--- /dev/null
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
@@ -0,0 +1,38 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int i;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void tint_symbol_inner(uint local_invocation_index) {
+  {
+    i = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+  i = 123;
+  int use = (i + 1);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl b/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl
new file mode 100644
index 0000000..9a7994a
--- /dev/null
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.glsl
@@ -0,0 +1,25 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int i;
+};
+
+void main_1() {
+  int i = 0;
+  S V = S(0);
+  int x_14 = V.i;
+  i = x_14;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl b/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl
new file mode 100644
index 0000000..9e372f3
--- /dev/null
+++ b/test/ptr_ref/load/local/struct_field.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int i;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  S V = S(0);
+  int i = V.i;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.glsl b/test/ptr_ref/load/param/ptr.spvasm.expected.glsl
new file mode 100644
index 0000000..847dadd
--- /dev/null
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.glsl
@@ -0,0 +1,25 @@
+#version 310 es
+precision mediump float;
+
+int func(int value, inout int pointer) {
+  int x_9 = pointer;
+  return (value + x_9);
+}
+
+void main_1() {
+  int i = 0;
+  i = 123;
+  int x_18 = func(i, i);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/load/param/ptr.wgsl.expected.glsl b/test/ptr_ref/load/param/ptr.wgsl.expected.glsl
new file mode 100644
index 0000000..2323a1c
--- /dev/null
+++ b/test/ptr_ref/load/param/ptr.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+int func(int value, inout int pointer) {
+  return (value + pointer);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int i = 123;
+  int r = func(i, i);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.glsl b/test/ptr_ref/store/global/i32.spvasm.expected.glsl
new file mode 100644
index 0000000..12117ac
--- /dev/null
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.glsl
@@ -0,0 +1,21 @@
+#version 310 es
+precision mediump float;
+
+int I = 0;
+
+void main_1() {
+  I = 123;
+  I = ((100 + 20) + 3);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/global/i32.wgsl.expected.glsl b/test/ptr_ref/store/global/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..fec11c1
--- /dev/null
+++ b/test/ptr_ref/store/global/i32.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+int I = 0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  I = 123;
+  I = ((100 + 20) + 3);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl
new file mode 100644
index 0000000..75f6126
--- /dev/null
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.glsl
@@ -0,0 +1,24 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int i;
+};
+
+S V = S(0);
+
+void main_1() {
+  V.i = 5;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.glsl b/test/ptr_ref/store/local/i32.spvasm.expected.glsl
new file mode 100644
index 0000000..fcf6afb
--- /dev/null
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.glsl
@@ -0,0 +1,21 @@
+#version 310 es
+precision mediump float;
+
+void main_1() {
+  int i = 0;
+  i = 123;
+  i = 123;
+  i = ((100 + 20) + 3);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/local/i32.wgsl.expected.glsl b/test/ptr_ref/store/local/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..0364846
--- /dev/null
+++ b/test/ptr_ref/store/local/i32.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int i = 123;
+  i = 123;
+  i = ((100 + 20) + 3);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl b/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl
new file mode 100644
index 0000000..d7921f1
--- /dev/null
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.glsl
@@ -0,0 +1,23 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int i;
+};
+
+void main_1() {
+  S V = S(0);
+  V.i = 5;
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.glsl b/test/ptr_ref/store/param/ptr.spvasm.expected.glsl
new file mode 100644
index 0000000..cd8b75c
--- /dev/null
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.glsl
@@ -0,0 +1,25 @@
+#version 310 es
+precision mediump float;
+
+void func(int value, inout int pointer) {
+  pointer = value;
+  return;
+}
+
+void main_1() {
+  int i = 0;
+  i = 123;
+  func(123, i);
+  return;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  main_1();
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/ptr_ref/store/param/ptr.wgsl.expected.glsl b/test/ptr_ref/store/param/ptr.wgsl.expected.glsl
new file mode 100644
index 0000000..9e4326c
--- /dev/null
+++ b/test/ptr_ref/store/param/ptr.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+void func(int value, inout int pointer) {
+  pointer = value;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int i = 123;
+  func(123, i);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/samples/compute_boids.wgsl.expected.glsl b/test/samples/compute_boids.wgsl.expected.glsl
new file mode 100644
index 0000000..b924fd4
--- /dev/null
+++ b/test/samples/compute_boids.wgsl.expected.glsl
@@ -0,0 +1,201 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  vec2 a_particlePos;
+  vec2 a_particleVel;
+  vec2 a_pos;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 vert_main_inner(vec2 a_particlePos, vec2 a_particleVel, vec2 a_pos) {
+  float angle = -(atan(a_particleVel.x, a_particleVel.y));
+  vec2 pos = vec2(((a_pos.x * cos(angle)) - (a_pos.y * sin(angle))), ((a_pos.x * sin(angle)) + (a_pos.y * cos(angle))));
+  return vec4((pos + a_particlePos), 0.0f, 1.0f);
+}
+
+struct tint_symbol_4 {
+  vec4 value;
+};
+struct Particle {
+  vec2 pos;
+  vec2 vel;
+};
+struct tint_symbol_6 {
+  uvec3 tint_symbol;
+};
+
+tint_symbol_3 vert_main(tint_symbol_2 tint_symbol_1) {
+  vec4 inner_result = vert_main_inner(tint_symbol_1.a_particlePos, tint_symbol_1.a_particleVel, tint_symbol_1.a_pos);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+in vec2 a_particlePos;
+in vec2 a_particleVel;
+in vec2 a_pos;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.a_particlePos = a_particlePos;
+  inputs.a_particleVel = a_particleVel;
+  inputs.a_pos = a_pos;
+  tint_symbol_3 outputs;
+  outputs = vert_main(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  vec2 a_particlePos;
+  vec2 a_particleVel;
+  vec2 a_pos;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+struct tint_symbol_4 {
+  vec4 value;
+};
+
+vec4 frag_main_inner() {
+  return vec4(1.0f, 1.0f, 1.0f, 1.0f);
+}
+
+struct Particle {
+  vec2 pos;
+  vec2 vel;
+};
+struct tint_symbol_6 {
+  uvec3 tint_symbol;
+};
+
+tint_symbol_4 frag_main() {
+  vec4 inner_result_1 = frag_main_inner();
+  tint_symbol_4 wrapper_result_1 = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+out vec4 value;
+void main() {
+  tint_symbol_4 outputs;
+  outputs = frag_main();
+  value = outputs.value;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  vec2 a_particlePos;
+  vec2 a_particleVel;
+  vec2 a_pos;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+struct tint_symbol_4 {
+  vec4 value;
+};
+struct Particle {
+  vec2 pos;
+  vec2 vel;
+};
+
+layout (binding = 0) uniform SimParams_1 {
+  float deltaT;
+  float rule1Distance;
+  float rule2Distance;
+  float rule3Distance;
+  float rule1Scale;
+  float rule2Scale;
+  float rule3Scale;
+} params;
+layout (binding = 1) buffer Particles_1 {
+  Particle particles[5];
+} particlesA;
+layout (binding = 2) buffer Particles_2 {
+  Particle particles[5];
+} particlesB;
+
+struct tint_symbol_6 {
+  uvec3 tint_symbol;
+};
+
+void comp_main_inner(uvec3 tint_symbol) {
+  uint index = tint_symbol.x;
+  if ((index >= 5u)) {
+    return;
+  }
+  vec2 vPos = particlesA.particles[index].pos;
+  vec2 vVel = particlesA.particles[index].vel;
+  vec2 cMass = vec2(0.0f, 0.0f);
+  vec2 cVel = vec2(0.0f, 0.0f);
+  vec2 colVel = vec2(0.0f, 0.0f);
+  int cMassCount = 0;
+  int cVelCount = 0;
+  vec2 pos = vec2(0.0f, 0.0f);
+  vec2 vel = vec2(0.0f, 0.0f);
+  {
+    for(uint i = 0u; (i < 5u); i = (i + 1u)) {
+      if ((i == index)) {
+        continue;
+      }
+      pos = particlesA.particles[i].pos.xy;
+      vel = particlesA.particles[i].vel.xy;
+      if ((distance(pos, vPos) < params.rule1Distance)) {
+        cMass = (cMass + pos);
+        cMassCount = (cMassCount + 1);
+      }
+      if ((distance(pos, vPos) < params.rule2Distance)) {
+        colVel = (colVel - (pos - vPos));
+      }
+      if ((distance(pos, vPos) < params.rule3Distance)) {
+        cVel = (cVel + vel);
+        cVelCount = (cVelCount + 1);
+      }
+    }
+  }
+  if ((cMassCount > 0)) {
+    cMass = ((cMass / vec2(float(cMassCount), float(cMassCount))) - vPos);
+  }
+  if ((cVelCount > 0)) {
+    cVel = (cVel / vec2(float(cVelCount), float(cVelCount)));
+  }
+  vVel = (((vVel + (cMass * params.rule1Scale)) + (colVel * params.rule2Scale)) + (cVel * params.rule3Scale));
+  vVel = (normalize(vVel) * clamp(length(vVel), 0.0f, 0.100000001f));
+  vPos = (vPos + (vVel * params.deltaT));
+  if ((vPos.x < -1.0f)) {
+    vPos.x = 1.0f;
+  }
+  if ((vPos.x > 1.0f)) {
+    vPos.x = -1.0f;
+  }
+  if ((vPos.y < -1.0f)) {
+    vPos.y = 1.0f;
+  }
+  if ((vPos.y > 1.0f)) {
+    vPos.y = -1.0f;
+  }
+  particlesB.particles[index].pos = vPos;
+  particlesB.particles[index].vel = vVel;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void comp_main(tint_symbol_6 tint_symbol_5) {
+  comp_main_inner(tint_symbol_5.tint_symbol);
+  return;
+}
+void main() {
+  tint_symbol_6 inputs;
+  inputs.tint_symbol = gl_GlobalInvocationID;
+  comp_main(inputs);
+}
+
+
diff --git a/test/samples/cube.wgsl.expected.glsl b/test/samples/cube.wgsl.expected.glsl
new file mode 100644
index 0000000..1afe19d
--- /dev/null
+++ b/test/samples/cube.wgsl.expected.glsl
@@ -0,0 +1,109 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform Uniforms_1 {
+  mat4 modelViewProjectionMatrix;
+} uniforms;
+
+struct VertexInput {
+  vec4 cur_position;
+  vec4 color;
+};
+struct VertexOutput {
+  vec4 vtxFragColor;
+  vec4 Position;
+};
+struct tint_symbol_3 {
+  vec4 cur_position;
+  vec4 color;
+};
+struct tint_symbol_4 {
+  vec4 vtxFragColor;
+  vec4 Position;
+};
+
+VertexOutput vtx_main_inner(VertexInput tint_symbol) {
+  VertexOutput tint_symbol_1 = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  tint_symbol_1.Position = (uniforms.modelViewProjectionMatrix * tint_symbol.cur_position);
+  tint_symbol_1.vtxFragColor = tint_symbol.color;
+  return tint_symbol_1;
+}
+
+struct tint_symbol_6 {
+  vec4 fragColor;
+};
+struct tint_symbol_7 {
+  vec4 value;
+};
+
+tint_symbol_4 vtx_main(tint_symbol_3 tint_symbol_2) {
+  VertexInput tint_symbol_8 = VertexInput(tint_symbol_2.cur_position, tint_symbol_2.color);
+  VertexOutput inner_result = vtx_main_inner(tint_symbol_8);
+  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.vtxFragColor = inner_result.vtxFragColor;
+  wrapper_result.Position = inner_result.Position;
+  return wrapper_result;
+}
+in vec4 cur_position;
+in vec4 color;
+out vec4 vtxFragColor;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.cur_position = cur_position;
+  inputs.color = color;
+  tint_symbol_4 outputs;
+  outputs = vtx_main(inputs);
+  vtxFragColor = outputs.vtxFragColor;
+  gl_Position = outputs.Position;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct VertexInput {
+  vec4 cur_position;
+  vec4 color;
+};
+struct VertexOutput {
+  vec4 vtxFragColor;
+  vec4 Position;
+};
+struct tint_symbol_3 {
+  vec4 cur_position;
+  vec4 color;
+};
+struct tint_symbol_4 {
+  vec4 vtxFragColor;
+  vec4 Position;
+};
+struct tint_symbol_6 {
+  vec4 fragColor;
+};
+struct tint_symbol_7 {
+  vec4 value;
+};
+
+vec4 frag_main_inner(vec4 fragColor) {
+  return fragColor;
+}
+
+tint_symbol_7 frag_main(tint_symbol_6 tint_symbol_5) {
+  vec4 inner_result_1 = frag_main_inner(tint_symbol_5.fragColor);
+  tint_symbol_7 wrapper_result_1 = tint_symbol_7(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+in vec4 fragColor;
+out vec4 value;
+void main() {
+  tint_symbol_6 inputs;
+  inputs.fragColor = fragColor;
+  tint_symbol_7 outputs;
+  outputs = frag_main(inputs);
+  value = outputs.value;
+}
+
+
diff --git a/test/samples/function.wgsl.expected.glsl b/test/samples/function.wgsl.expected.glsl
new file mode 100644
index 0000000..4a81677
--- /dev/null
+++ b/test/samples/function.wgsl.expected.glsl
@@ -0,0 +1,12 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 2, local_size_y = 1, local_size_z = 1) in;
+void ep() {
+  return;
+}
+void main() {
+  ep();
+}
+
+
diff --git a/test/samples/simple.wgsl.expected.glsl b/test/samples/simple.wgsl.expected.glsl
new file mode 100644
index 0000000..10830b0
--- /dev/null
+++ b/test/samples/simple.wgsl.expected.glsl
@@ -0,0 +1,30 @@
+#version 310 es
+precision mediump float;
+
+void bar() {
+}
+
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  vec2 a = vec2(0.0f, 0.0f);
+  bar();
+  return vec4(0.400000006f, 0.400000006f, 0.800000012f, 1.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+out vec4 value;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  value = outputs.value;
+}
+
+
diff --git a/test/samples/simple_vertex.spvasm.expected.glsl b/test/samples/simple_vertex.spvasm.expected.glsl
new file mode 100644
index 0000000..fc281a4
--- /dev/null
+++ b/test/samples/simple_vertex.spvasm.expected.glsl
@@ -0,0 +1,37 @@
+#version 310 es
+precision mediump float;
+
+vec4 tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+
+void main_1() {
+  tint_symbol = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  return;
+}
+
+struct main_out {
+  vec4 tint_symbol;
+};
+struct tint_symbol_2 {
+  vec4 tint_symbol;
+};
+
+main_out tint_symbol_1_inner() {
+  main_1();
+  main_out tint_symbol_3 = main_out(tint_symbol);
+  return tint_symbol_3;
+}
+
+tint_symbol_2 tint_symbol_1() {
+  main_out inner_result = tint_symbol_1_inner();
+  tint_symbol_2 wrapper_result = tint_symbol_2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.tint_symbol = inner_result.tint_symbol;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_2 outputs;
+  outputs = tint_symbol_1();
+  gl_Position = outputs.tint_symbol;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/samples/triangle.wgsl.expected.glsl b/test/samples/triangle.wgsl.expected.glsl
new file mode 100644
index 0000000..1604370
--- /dev/null
+++ b/test/samples/triangle.wgsl.expected.glsl
@@ -0,0 +1,66 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_1 {
+  uint VertexIndex;
+};
+struct tint_symbol_2 {
+  vec4 value;
+};
+
+vec4 vtx_main_inner(uint VertexIndex) {
+  vec2 pos[3] = vec2[3](vec2(0.0f, 0.5f), vec2(-0.5f, -0.5f), vec2(0.5f, -0.5f));
+  return vec4(pos[VertexIndex], 0.0f, 1.0f);
+}
+
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+tint_symbol_2 vtx_main(tint_symbol_1 tint_symbol) {
+  vec4 inner_result = vtx_main_inner(tint_symbol.VertexIndex);
+  tint_symbol_2 wrapper_result = tint_symbol_2(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 inputs;
+  inputs.VertexIndex = uint(gl_VertexID);
+  tint_symbol_2 outputs;
+  outputs = vtx_main(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_1 {
+  uint VertexIndex;
+};
+struct tint_symbol_2 {
+  vec4 value;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 frag_main_inner() {
+  return vec4(1.0f, 0.0f, 0.0f, 1.0f);
+}
+
+tint_symbol_3 frag_main() {
+  vec4 inner_result_1 = frag_main_inner();
+  tint_symbol_3 wrapper_result_1 = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+out vec4 value;
+void main() {
+  tint_symbol_3 outputs;
+  outputs = frag_main();
+  value = outputs.value;
+}
+
+
diff --git a/test/shader_io/compute_input_builtins.wgsl.expected.glsl b/test/shader_io/compute_input_builtins.wgsl.expected.glsl
new file mode 100644
index 0000000..992a1ba
--- /dev/null
+++ b/test/shader_io/compute_input_builtins.wgsl.expected.glsl
@@ -0,0 +1,41 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  uvec3 local_invocation_id;
+  uint local_invocation_index;
+  uvec3 global_invocation_id;
+  uvec3 workgroup_id;
+  uvec3 num_workgroups;
+};
+
+void tint_symbol_inner(uvec3 local_invocation_id, uint local_invocation_index, uvec3 global_invocation_id, uvec3 workgroup_id, uvec3 num_workgroups) {
+  uint foo = ((((local_invocation_id.x + local_invocation_index) + global_invocation_id.x) + workgroup_id.x) + num_workgroups.x);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_id, tint_symbol_1.local_invocation_index, tint_symbol_1.global_invocation_id, tint_symbol_1.workgroup_id, tint_symbol_1.num_workgroups);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_id = gl_LocalInvocationID;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  inputs.global_invocation_id = gl_GlobalInvocationID;
+  inputs.workgroup_id = gl_WorkGroupID;
+  inputs.num_workgroups = uvec3();
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:27: 'constructor' : not enough data provided for construction 
+ERROR: 0:27: 'assign' :  cannot convert from ' const float' to ' global highp 3-component vector of uint'
+ERROR: 0:27: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..4952e91
--- /dev/null
+++ b/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct ComputeInputs {
+  uvec3 local_invocation_id;
+  uint local_invocation_index;
+  uvec3 global_invocation_id;
+  uvec3 workgroup_id;
+  uvec3 num_workgroups;
+};
+struct tint_symbol_2 {
+  uvec3 local_invocation_id;
+  uint local_invocation_index;
+  uvec3 global_invocation_id;
+  uvec3 workgroup_id;
+  uvec3 num_workgroups;
+};
+
+void tint_symbol_inner(ComputeInputs inputs) {
+  uint foo = ((((inputs.local_invocation_id.x + inputs.local_invocation_index) + inputs.global_invocation_id.x) + inputs.workgroup_id.x) + inputs.num_workgroups.x);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  ComputeInputs tint_symbol_3 = ComputeInputs(tint_symbol_1.local_invocation_id, tint_symbol_1.local_invocation_index, tint_symbol_1.global_invocation_id, tint_symbol_1.workgroup_id, tint_symbol_1.num_workgroups);
+  tint_symbol_inner(tint_symbol_3);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_id = gl_LocalInvocationID;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  inputs.global_invocation_id = gl_GlobalInvocationID;
+  inputs.workgroup_id = gl_WorkGroupID;
+  inputs.num_workgroups = uvec3();
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:35: 'constructor' : not enough data provided for construction 
+ERROR: 0:35: 'assign' :  cannot convert from ' const float' to ' global highp 3-component vector of uint'
+ERROR: 0:35: '' : compilation terminated 
+ERROR: 3 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/compute_input_mixed.wgsl.expected.glsl b/test/shader_io/compute_input_mixed.wgsl.expected.glsl
new file mode 100644
index 0000000..763d31e
--- /dev/null
+++ b/test/shader_io/compute_input_mixed.wgsl.expected.glsl
@@ -0,0 +1,37 @@
+#version 310 es
+precision mediump float;
+
+struct ComputeInputs0 {
+  uvec3 local_invocation_id;
+};
+struct ComputeInputs1 {
+  uvec3 workgroup_id;
+};
+struct tint_symbol_2 {
+  uvec3 local_invocation_id;
+  uint local_invocation_index;
+  uvec3 global_invocation_id;
+  uvec3 workgroup_id;
+};
+
+void tint_symbol_inner(ComputeInputs0 inputs0, uint local_invocation_index, uvec3 global_invocation_id, ComputeInputs1 inputs1) {
+  uint foo = (((inputs0.local_invocation_id.x + local_invocation_index) + global_invocation_id.x) + inputs1.workgroup_id.x);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  ComputeInputs0 tint_symbol_3 = ComputeInputs0(tint_symbol_1.local_invocation_id);
+  ComputeInputs1 tint_symbol_4 = ComputeInputs1(tint_symbol_1.workgroup_id);
+  tint_symbol_inner(tint_symbol_3, tint_symbol_1.local_invocation_index, tint_symbol_1.global_invocation_id, tint_symbol_4);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_id = gl_LocalInvocationID;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  inputs.global_invocation_id = gl_GlobalInvocationID;
+  inputs.workgroup_id = gl_WorkGroupID;
+  tint_symbol(inputs);
+}
+
+
diff --git a/test/shader_io/fragment_input_builtins.wgsl.expected.glsl b/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
new file mode 100644
index 0000000..cef02b4
--- /dev/null
+++ b/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
@@ -0,0 +1,40 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  vec4 position;
+  bool front_facing;
+  uint sample_index;
+  uint sample_mask;
+};
+
+void tint_symbol_inner(vec4 position, bool front_facing, uint sample_index, uint sample_mask) {
+  if (front_facing) {
+    vec4 foo = position;
+    uint bar = (sample_index + sample_mask);
+  }
+}
+
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.position, tint_symbol_1.front_facing, tint_symbol_1.sample_index, tint_symbol_1.sample_mask);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.position = gl_FragCoord;
+  inputs.front_facing = gl_FrontFacing;
+  inputs.sample_index = uint(gl_SampleID);
+  inputs.sample_mask = uint(gl_SampleMask);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:26: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:26: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..a7299c1
--- /dev/null
+++ b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct FragmentInputs {
+  vec4 position;
+  bool front_facing;
+  uint sample_index;
+  uint sample_mask;
+};
+struct tint_symbol_2 {
+  vec4 position;
+  bool front_facing;
+  uint sample_index;
+  uint sample_mask;
+};
+
+void tint_symbol_inner(FragmentInputs inputs) {
+  if (inputs.front_facing) {
+    vec4 foo = inputs.position;
+    uint bar = (inputs.sample_index + inputs.sample_mask);
+  }
+}
+
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  FragmentInputs tint_symbol_3 = FragmentInputs(tint_symbol_1.position, tint_symbol_1.front_facing, tint_symbol_1.sample_index, tint_symbol_1.sample_mask);
+  tint_symbol_inner(tint_symbol_3);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.position = gl_FragCoord;
+  inputs.front_facing = gl_FrontFacing;
+  inputs.sample_index = uint(gl_SampleID);
+  inputs.sample_mask = uint(gl_SampleMask);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:33: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:33: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_input_locations.wgsl.expected.glsl b/test/shader_io/fragment_input_locations.wgsl.expected.glsl
new file mode 100644
index 0000000..b5a0b0e
--- /dev/null
+++ b/test/shader_io/fragment_input_locations.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+
+void tint_symbol_inner(int loc0, uint loc1, float loc2, vec4 loc3) {
+  int i = loc0;
+  uint u = loc1;
+  float f = loc2;
+  vec4 v = loc3;
+}
+
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.loc0, tint_symbol_1.loc1, tint_symbol_1.loc2, tint_symbol_1.loc3);
+  return;
+}
+in int loc0;
+in uint loc1;
+in float loc2;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc2 = loc2;
+  inputs.loc3 = loc3;
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:22: 'int' : must be qualified as flat in
+ERROR: 0:22: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl b/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..952f01b
--- /dev/null
+++ b/test/shader_io/fragment_input_locations_struct.wgsl.expected.glsl
@@ -0,0 +1,51 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct FragmentInputs {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+
+void tint_symbol_inner(FragmentInputs inputs) {
+  int i = inputs.loc0;
+  uint u = inputs.loc1;
+  float f = inputs.loc2;
+  vec4 v = inputs.loc3;
+}
+
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  FragmentInputs tint_symbol_3 = FragmentInputs(tint_symbol_1.loc0, tint_symbol_1.loc1, tint_symbol_1.loc2, tint_symbol_1.loc3);
+  tint_symbol_inner(tint_symbol_3);
+  return;
+}
+in int loc0;
+in uint loc1;
+in float loc2;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc2 = loc2;
+  inputs.loc3 = loc3;
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:29: 'int' : must be qualified as flat in
+ERROR: 0:29: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_input_mixed.wgsl.expected.glsl b/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
new file mode 100644
index 0000000..2b31e3c
--- /dev/null
+++ b/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
@@ -0,0 +1,66 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct FragmentInputs0 {
+  vec4 position;
+  int loc0;
+};
+struct FragmentInputs1 {
+  vec4 loc3;
+  uint sample_mask;
+};
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+  vec4 position;
+  bool front_facing;
+  uint sample_index;
+  uint sample_mask;
+};
+
+void tint_symbol_inner(FragmentInputs0 inputs0, bool front_facing, uint loc1, uint sample_index, FragmentInputs1 inputs1, float loc2) {
+  if (front_facing) {
+    vec4 foo = inputs0.position;
+    uint bar = (sample_index + inputs1.sample_mask);
+    int i = inputs0.loc0;
+    uint u = loc1;
+    float f = loc2;
+    vec4 v = inputs1.loc3;
+  }
+}
+
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  FragmentInputs0 tint_symbol_3 = FragmentInputs0(tint_symbol_1.position, tint_symbol_1.loc0);
+  FragmentInputs1 tint_symbol_4 = FragmentInputs1(tint_symbol_1.loc3, tint_symbol_1.sample_mask);
+  tint_symbol_inner(tint_symbol_3, tint_symbol_1.front_facing, tint_symbol_1.loc1, tint_symbol_1.sample_index, tint_symbol_4, tint_symbol_1.loc2);
+  return;
+}
+in int loc0;
+in uint loc1;
+in float loc2;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc2 = loc2;
+  inputs.loc3 = loc3;
+  inputs.position = gl_FragCoord;
+  inputs.front_facing = gl_FrontFacing;
+  inputs.sample_index = uint(gl_SampleID);
+  inputs.sample_mask = uint(gl_SampleMask);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:40: 'int' : must be qualified as flat in
+ERROR: 0:40: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_output_builtins.wgsl.expected.glsl b/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
new file mode 100644
index 0000000..b13fd6a
--- /dev/null
+++ b/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
@@ -0,0 +1,64 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  float value;
+};
+
+float main1_inner() {
+  return 1.0f;
+}
+
+struct tint_symbol_1 {
+  uint value;
+};
+
+tint_symbol main1() {
+  float inner_result = main1_inner();
+  tint_symbol wrapper_result = tint_symbol(0.0f);
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol outputs;
+  outputs = main1();
+  gl_FragDepth = outputs.value;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  float value;
+};
+struct tint_symbol_1 {
+  uint value;
+};
+
+uint main2_inner() {
+  return 1u;
+}
+
+tint_symbol_1 main2() {
+  uint inner_result_1 = main2_inner();
+  tint_symbol_1 wrapper_result_1 = tint_symbol_1(0u);
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = main2();
+  gl_SampleMask = outputs.value;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:24: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:24: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..cdfd3fb
--- /dev/null
+++ b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
@@ -0,0 +1,41 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct FragmentOutputs {
+  float frag_depth;
+  uint sample_mask;
+};
+struct tint_symbol_1 {
+  float frag_depth;
+  uint sample_mask;
+};
+
+FragmentOutputs tint_symbol_inner() {
+  FragmentOutputs tint_symbol_2 = FragmentOutputs(1.0f, 1u);
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  FragmentOutputs inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(0.0f, 0u);
+  wrapper_result.frag_depth = inner_result.frag_depth;
+  wrapper_result.sample_mask = inner_result.sample_mask;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  gl_FragDepth = outputs.frag_depth;
+  gl_SampleMask = outputs.sample_mask;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:29: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:29: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/fragment_output_locations.wgsl.expected.glsl b/test/shader_io/fragment_output_locations.wgsl.expected.glsl
new file mode 100644
index 0000000..61bf161
--- /dev/null
+++ b/test/shader_io/fragment_output_locations.wgsl.expected.glsl
@@ -0,0 +1,139 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  int value;
+};
+
+int main0_inner() {
+  return 1;
+}
+
+struct tint_symbol_1 {
+  uint value;
+};
+struct tint_symbol_2 {
+  float value;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+tint_symbol main0() {
+  int inner_result = main0_inner();
+  tint_symbol wrapper_result = tint_symbol(0);
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+out int value;
+void main() {
+  tint_symbol outputs;
+  outputs = main0();
+  value = outputs.value;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  int value;
+};
+struct tint_symbol_1 {
+  uint value;
+};
+
+uint main1_inner() {
+  return 1u;
+}
+
+struct tint_symbol_2 {
+  float value;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+tint_symbol_1 main1() {
+  uint inner_result_1 = main1_inner();
+  tint_symbol_1 wrapper_result_1 = tint_symbol_1(0u);
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+out uint value;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = main1();
+  value = outputs.value;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  int value;
+};
+struct tint_symbol_1 {
+  uint value;
+};
+struct tint_symbol_2 {
+  float value;
+};
+
+float main2_inner() {
+  return 1.0f;
+}
+
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+tint_symbol_2 main2() {
+  float inner_result_2 = main2_inner();
+  tint_symbol_2 wrapper_result_2 = tint_symbol_2(0.0f);
+  wrapper_result_2.value = inner_result_2;
+  return wrapper_result_2;
+}
+out float value;
+void main() {
+  tint_symbol_2 outputs;
+  outputs = main2();
+  value = outputs.value;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct tint_symbol {
+  int value;
+};
+struct tint_symbol_1 {
+  uint value;
+};
+struct tint_symbol_2 {
+  float value;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 main3_inner() {
+  return vec4(1.0f, 2.0f, 3.0f, 4.0f);
+}
+
+tint_symbol_3 main3() {
+  vec4 inner_result_3 = main3_inner();
+  tint_symbol_3 wrapper_result_3 = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result_3.value = inner_result_3;
+  return wrapper_result_3;
+}
+out vec4 value;
+void main() {
+  tint_symbol_3 outputs;
+  outputs = main3();
+  value = outputs.value;
+}
+
+
diff --git a/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl b/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..5c70910
--- /dev/null
+++ b/test/shader_io/fragment_output_locations_struct.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+#version 310 es
+precision mediump float;
+
+struct FragmentOutputs {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+struct tint_symbol_1 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+
+FragmentOutputs tint_symbol_inner() {
+  FragmentOutputs tint_symbol_2 = FragmentOutputs(1, 1u, 1.0f, vec4(1.0f, 2.0f, 3.0f, 4.0f));
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  FragmentOutputs inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(0, 0u, 0.0f, vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.loc0 = inner_result.loc0;
+  wrapper_result.loc1 = inner_result.loc1;
+  wrapper_result.loc2 = inner_result.loc2;
+  wrapper_result.loc3 = inner_result.loc3;
+  return wrapper_result;
+}
+out int loc0;
+out uint loc1;
+out float loc2;
+out vec4 loc3;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  loc0 = outputs.loc0;
+  loc1 = outputs.loc1;
+  loc2 = outputs.loc2;
+  loc3 = outputs.loc3;
+}
+
+
diff --git a/test/shader_io/fragment_output_mixed.wgsl.expected.glsl b/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
new file mode 100644
index 0000000..7b75630
--- /dev/null
+++ b/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
@@ -0,0 +1,61 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct FragmentOutputs {
+  int loc0;
+  float frag_depth;
+  uint loc1;
+  float loc2;
+  uint sample_mask;
+  vec4 loc3;
+};
+struct tint_symbol_1 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+  float frag_depth;
+  uint sample_mask;
+};
+
+FragmentOutputs tint_symbol_inner() {
+  FragmentOutputs tint_symbol_2 = FragmentOutputs(1, 2.0f, 1u, 1.0f, 2u, vec4(1.0f, 2.0f, 3.0f, 4.0f));
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  FragmentOutputs inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(0, 0u, 0.0f, vec4(0.0f, 0.0f, 0.0f, 0.0f), 0.0f, 0u);
+  wrapper_result.loc0 = inner_result.loc0;
+  wrapper_result.frag_depth = inner_result.frag_depth;
+  wrapper_result.loc1 = inner_result.loc1;
+  wrapper_result.loc2 = inner_result.loc2;
+  wrapper_result.sample_mask = inner_result.sample_mask;
+  wrapper_result.loc3 = inner_result.loc3;
+  return wrapper_result;
+}
+out int loc0;
+out uint loc1;
+out float loc2;
+out vec4 loc3;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  loc0 = outputs.loc0;
+  loc1 = outputs.loc1;
+  loc2 = outputs.loc2;
+  loc3 = outputs.loc3;
+  gl_FragDepth = outputs.frag_depth;
+  gl_SampleMask = outputs.sample_mask;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:49: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
+ERROR: 0:49: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl b/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl
new file mode 100644
index 0000000..afc6164
--- /dev/null
+++ b/test/shader_io/interpolate_input_parameters.wgsl.expected.glsl
@@ -0,0 +1,43 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_3 {
+  float none;
+  float tint_symbol_1;
+  float perspective_center;
+  float perspective_centroid;
+  float perspective_sample;
+  float linear_center;
+  float linear_centroid;
+  float linear_sample;
+};
+
+void tint_symbol_inner(float none, float tint_symbol_1, float perspective_center, float perspective_centroid, float perspective_sample, float linear_center, float linear_centroid, float linear_sample) {
+}
+
+void tint_symbol(tint_symbol_3 tint_symbol_2) {
+  tint_symbol_inner(tint_symbol_2.none, tint_symbol_2.tint_symbol_1, tint_symbol_2.perspective_center, tint_symbol_2.perspective_centroid, tint_symbol_2.perspective_sample, tint_symbol_2.linear_center, tint_symbol_2.linear_centroid, tint_symbol_2.linear_sample);
+  return;
+}
+in float none;
+in float tint_symbol_1;
+in float perspective_center;
+in float perspective_centroid;
+in float perspective_sample;
+in float linear_center;
+in float linear_centroid;
+in float linear_sample;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.none = none;
+  inputs.tint_symbol_1 = tint_symbol_1;
+  inputs.perspective_center = perspective_center;
+  inputs.perspective_centroid = perspective_centroid;
+  inputs.perspective_sample = perspective_sample;
+  inputs.linear_center = linear_center;
+  inputs.linear_centroid = linear_centroid;
+  inputs.linear_sample = linear_sample;
+  tint_symbol(inputs);
+}
+
+
diff --git a/test/shader_io/interpolate_input_struct.wgsl.expected.glsl b/test/shader_io/interpolate_input_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..697f4ca
--- /dev/null
+++ b/test/shader_io/interpolate_input_struct.wgsl.expected.glsl
@@ -0,0 +1,54 @@
+#version 310 es
+precision mediump float;
+
+struct In {
+  float none;
+  float tint_symbol;
+  float perspective_center;
+  float perspective_centroid;
+  float perspective_sample;
+  float linear_center;
+  float linear_centroid;
+  float linear_sample;
+};
+struct tint_symbol_4 {
+  float none;
+  float tint_symbol;
+  float perspective_center;
+  float perspective_centroid;
+  float perspective_sample;
+  float linear_center;
+  float linear_centroid;
+  float linear_sample;
+};
+
+void tint_symbol_1_inner(In tint_symbol_2) {
+}
+
+void tint_symbol_1(tint_symbol_4 tint_symbol_3) {
+  In tint_symbol_5 = In(tint_symbol_3.none, tint_symbol_3.tint_symbol, tint_symbol_3.perspective_center, tint_symbol_3.perspective_centroid, tint_symbol_3.perspective_sample, tint_symbol_3.linear_center, tint_symbol_3.linear_centroid, tint_symbol_3.linear_sample);
+  tint_symbol_1_inner(tint_symbol_5);
+  return;
+}
+in float none;
+in float tint_symbol;
+in float perspective_center;
+in float perspective_centroid;
+in float perspective_sample;
+in float linear_center;
+in float linear_centroid;
+in float linear_sample;
+void main() {
+  tint_symbol_4 inputs;
+  inputs.none = none;
+  inputs.tint_symbol = tint_symbol;
+  inputs.perspective_center = perspective_center;
+  inputs.perspective_centroid = perspective_centroid;
+  inputs.perspective_sample = perspective_sample;
+  inputs.linear_center = linear_center;
+  inputs.linear_centroid = linear_centroid;
+  inputs.linear_sample = linear_sample;
+  tint_symbol_1(inputs);
+}
+
+
diff --git a/test/shader_io/interpolate_integers.wgsl.expected.glsl b/test/shader_io/interpolate_integers.wgsl.expected.glsl
new file mode 100644
index 0000000..1bb1c04
--- /dev/null
+++ b/test/shader_io/interpolate_integers.wgsl.expected.glsl
@@ -0,0 +1,126 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct Interface {
+  int i;
+  uint u;
+  ivec4 vi;
+  uvec4 vu;
+  vec4 pos;
+};
+struct tint_symbol {
+  int i;
+  uint u;
+  ivec4 vi;
+  uvec4 vu;
+  vec4 pos;
+};
+
+Interface vert_main_inner() {
+  Interface tint_symbol_4 = Interface(0, 0u, ivec4(0, 0, 0, 0), uvec4(0u, 0u, 0u, 0u), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return tint_symbol_4;
+}
+
+struct tint_symbol_2 {
+  int i;
+  uint u;
+  ivec4 vi;
+  uvec4 vu;
+  vec4 pos;
+};
+struct tint_symbol_3 {
+  int value;
+};
+
+tint_symbol vert_main() {
+  Interface inner_result = vert_main_inner();
+  tint_symbol wrapper_result = tint_symbol(0, 0u, ivec4(0, 0, 0, 0), uvec4(0u, 0u, 0u, 0u), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.i = inner_result.i;
+  wrapper_result.u = inner_result.u;
+  wrapper_result.vi = inner_result.vi;
+  wrapper_result.vu = inner_result.vu;
+  wrapper_result.pos = inner_result.pos;
+  return wrapper_result;
+}
+out int i;
+out uint u;
+out ivec4 vi;
+out uvec4 vu;
+void main() {
+  tint_symbol outputs;
+  outputs = vert_main();
+  i = outputs.i;
+  u = outputs.u;
+  vi = outputs.vi;
+  vu = outputs.vu;
+  gl_Position = outputs.pos;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct Interface {
+  int i;
+  uint u;
+  ivec4 vi;
+  uvec4 vu;
+  vec4 pos;
+};
+struct tint_symbol {
+  int i;
+  uint u;
+  ivec4 vi;
+  uvec4 vu;
+  vec4 pos;
+};
+struct tint_symbol_2 {
+  int i;
+  uint u;
+  ivec4 vi;
+  uvec4 vu;
+  vec4 pos;
+};
+struct tint_symbol_3 {
+  int value;
+};
+
+int frag_main_inner(Interface inputs) {
+  return inputs.i;
+}
+
+tint_symbol_3 frag_main(tint_symbol_2 tint_symbol_1) {
+  Interface tint_symbol_4 = Interface(tint_symbol_1.i, tint_symbol_1.u, tint_symbol_1.vi, tint_symbol_1.vu, tint_symbol_1.pos);
+  int inner_result_1 = frag_main_inner(tint_symbol_4);
+  tint_symbol_3 wrapper_result_1 = tint_symbol_3(0);
+  wrapper_result_1.value = inner_result_1;
+  return wrapper_result_1;
+}
+in int i;
+in uint u;
+in ivec4 vi;
+in uvec4 vu;
+out int value;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.i = i;
+  inputs.u = u;
+  inputs.vi = vi;
+  inputs.vu = vu;
+  inputs.pos = gl_FragCoord;
+  tint_symbol_3 outputs;
+  outputs = frag_main(inputs);
+  value = outputs.value;
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:40: 'int' : must be qualified as flat in
+ERROR: 0:40: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/interpolate_return_struct.wgsl.expected.glsl b/test/shader_io/interpolate_return_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..3773530
--- /dev/null
+++ b/test/shader_io/interpolate_return_struct.wgsl.expected.glsl
@@ -0,0 +1,69 @@
+#version 310 es
+precision mediump float;
+
+struct Out {
+  vec4 pos;
+  float none;
+  float tint_symbol;
+  float perspective_center;
+  float perspective_centroid;
+  float perspective_sample;
+  float linear_center;
+  float linear_centroid;
+  float linear_sample;
+};
+struct tint_symbol_2 {
+  float none;
+  float tint_symbol;
+  float perspective_center;
+  float perspective_centroid;
+  float perspective_sample;
+  float linear_center;
+  float linear_centroid;
+  float linear_sample;
+  vec4 pos;
+};
+
+Out tint_symbol_1_inner() {
+  Out tint_symbol_3 = Out(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  return tint_symbol_3;
+}
+
+tint_symbol_2 tint_symbol_1() {
+  Out inner_result = tint_symbol_1_inner();
+  tint_symbol_2 wrapper_result = tint_symbol_2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.pos = inner_result.pos;
+  wrapper_result.none = inner_result.none;
+  wrapper_result.tint_symbol = inner_result.tint_symbol;
+  wrapper_result.perspective_center = inner_result.perspective_center;
+  wrapper_result.perspective_centroid = inner_result.perspective_centroid;
+  wrapper_result.perspective_sample = inner_result.perspective_sample;
+  wrapper_result.linear_center = inner_result.linear_center;
+  wrapper_result.linear_centroid = inner_result.linear_centroid;
+  wrapper_result.linear_sample = inner_result.linear_sample;
+  return wrapper_result;
+}
+out float none;
+out float tint_symbol;
+out float perspective_center;
+out float perspective_centroid;
+out float perspective_sample;
+out float linear_center;
+out float linear_centroid;
+out float linear_sample;
+void main() {
+  tint_symbol_2 outputs;
+  outputs = tint_symbol_1();
+  none = outputs.none;
+  tint_symbol = outputs.tint_symbol;
+  perspective_center = outputs.perspective_center;
+  perspective_centroid = outputs.perspective_centroid;
+  perspective_sample = outputs.perspective_sample;
+  linear_center = outputs.linear_center;
+  linear_centroid = outputs.linear_centroid;
+  linear_sample = outputs.linear_sample;
+  gl_Position = outputs.pos;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/invariant.wgsl.expected.glsl b/test/shader_io/invariant.wgsl.expected.glsl
new file mode 100644
index 0000000..f4a5922
--- /dev/null
+++ b/test/shader_io/invariant.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/invariant_struct_member.wgsl.expected.glsl b/test/shader_io/invariant_struct_member.wgsl.expected.glsl
new file mode 100644
index 0000000..72de2f5
--- /dev/null
+++ b/test/shader_io/invariant_struct_member.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+#version 310 es
+precision mediump float;
+
+struct Out {
+  vec4 pos;
+};
+struct tint_symbol_1 {
+  vec4 pos;
+};
+
+Out tint_symbol_inner() {
+  Out tint_symbol_2 = Out(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  Out inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.pos = inner_result.pos;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  gl_Position = outputs.pos;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl b/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl
new file mode 100644
index 0000000..7926242
--- /dev/null
+++ b/test/shader_io/shared_struct_different_stages.wgsl.expected.glsl
@@ -0,0 +1,85 @@
+#version 310 es
+precision mediump float;
+
+struct Interface {
+  float col1;
+  float col2;
+  vec4 pos;
+};
+struct tint_symbol {
+  float col1;
+  float col2;
+  vec4 pos;
+};
+
+Interface vert_main_inner() {
+  Interface tint_symbol_3 = Interface(0.400000006f, 0.600000024f, vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return tint_symbol_3;
+}
+
+struct tint_symbol_2 {
+  float col1;
+  float col2;
+  vec4 pos;
+};
+
+tint_symbol vert_main() {
+  Interface inner_result = vert_main_inner();
+  tint_symbol wrapper_result = tint_symbol(0.0f, 0.0f, vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.col1 = inner_result.col1;
+  wrapper_result.col2 = inner_result.col2;
+  wrapper_result.pos = inner_result.pos;
+  return wrapper_result;
+}
+out float col1;
+out float col2;
+void main() {
+  tint_symbol outputs;
+  outputs = vert_main();
+  col1 = outputs.col1;
+  col2 = outputs.col2;
+  gl_Position = outputs.pos;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct Interface {
+  float col1;
+  float col2;
+  vec4 pos;
+};
+struct tint_symbol {
+  float col1;
+  float col2;
+  vec4 pos;
+};
+struct tint_symbol_2 {
+  float col1;
+  float col2;
+  vec4 pos;
+};
+
+void frag_main_inner(Interface colors) {
+  float r = colors.col1;
+  float g = colors.col2;
+}
+
+void frag_main(tint_symbol_2 tint_symbol_1) {
+  Interface tint_symbol_3 = Interface(tint_symbol_1.col1, tint_symbol_1.col2, tint_symbol_1.pos);
+  frag_main_inner(tint_symbol_3);
+  return;
+}
+in float col1;
+in float col2;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.col1 = col1;
+  inputs.col2 = col2;
+  inputs.pos = gl_FragCoord;
+  frag_main(inputs);
+}
+
+
diff --git a/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl b/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl
new file mode 100644
index 0000000..63a9342
--- /dev/null
+++ b/test/shader_io/shared_struct_helper_function.wgsl.expected.glsl
@@ -0,0 +1,87 @@
+#version 310 es
+precision mediump float;
+
+struct VertexOutput {
+  vec4 pos;
+  int loc0;
+};
+
+VertexOutput foo(float x) {
+  VertexOutput tint_symbol_2 = VertexOutput(vec4(x, x, x, 1.0f), 42);
+  return tint_symbol_2;
+}
+
+struct tint_symbol {
+  int loc0;
+  vec4 pos;
+};
+
+VertexOutput vert_main1_inner() {
+  return foo(0.5f);
+}
+
+struct tint_symbol_1 {
+  int loc0;
+  vec4 pos;
+};
+
+tint_symbol vert_main1() {
+  VertexOutput inner_result = vert_main1_inner();
+  tint_symbol wrapper_result = tint_symbol(0, vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.pos = inner_result.pos;
+  wrapper_result.loc0 = inner_result.loc0;
+  return wrapper_result;
+}
+out int loc0;
+void main() {
+  tint_symbol outputs;
+  outputs = vert_main1();
+  loc0 = outputs.loc0;
+  gl_Position = outputs.pos;
+  gl_Position.y = -gl_Position.y;
+}
+
+
+#version 310 es
+precision mediump float;
+
+struct VertexOutput {
+  vec4 pos;
+  int loc0;
+};
+
+VertexOutput foo(float x) {
+  VertexOutput tint_symbol_2 = VertexOutput(vec4(x, x, x, 1.0f), 42);
+  return tint_symbol_2;
+}
+
+struct tint_symbol {
+  int loc0;
+  vec4 pos;
+};
+struct tint_symbol_1 {
+  int loc0;
+  vec4 pos;
+};
+
+VertexOutput vert_main2_inner() {
+  return foo(0.25f);
+}
+
+tint_symbol_1 vert_main2() {
+  VertexOutput inner_result_1 = vert_main2_inner();
+  tint_symbol_1 wrapper_result_1 = tint_symbol_1(0, vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result_1.pos = inner_result_1.pos;
+  wrapper_result_1.loc0 = inner_result_1.loc0;
+  return wrapper_result_1;
+}
+out int loc0;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = vert_main2();
+  loc0 = outputs.loc0;
+  gl_Position = outputs.pos;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl
new file mode 100644
index 0000000..ea2e4e8
--- /dev/null
+++ b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.glsl
@@ -0,0 +1,47 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  float f;
+  uint u;
+  vec4 v;
+} tint_symbol;
+
+struct tint_symbol_3 {
+  float f;
+  uint u;
+  vec4 v;
+};
+
+void frag_main_inner(S tint_symbol_1) {
+  float f = tint_symbol_1.f;
+  uint u = tint_symbol_1.u;
+  vec4 v = tint_symbol_1.v;
+  tint_symbol = tint_symbol_1;
+}
+
+void frag_main(tint_symbol_3 tint_symbol_2) {
+  S tint_symbol_4 = S(tint_symbol_2.f, tint_symbol_2.u, tint_symbol_2.v);
+  frag_main_inner(tint_symbol_4);
+  return;
+}
+in float f;
+in uint u;
+void main() {
+  tint_symbol_3 inputs;
+  inputs.f = f;
+  inputs.u = u;
+  inputs.v = gl_FragCoord;
+  frag_main(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:17: '' :  syntax error, unexpected IDENTIFIER, expecting RIGHT_PAREN
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/shader_io/vertex_input_builtins.wgsl.expected.glsl b/test/shader_io/vertex_input_builtins.wgsl.expected.glsl
new file mode 100644
index 0000000..fc2ba6e
--- /dev/null
+++ b/test/shader_io/vertex_input_builtins.wgsl.expected.glsl
@@ -0,0 +1,33 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  uint vertex_index;
+  uint instance_index;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(uint vertex_index, uint instance_index) {
+  uint foo = (vertex_index + instance_index);
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  vec4 inner_result = tint_symbol_inner(tint_symbol_1.vertex_index, tint_symbol_1.instance_index);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.vertex_index = uint(gl_VertexID);
+  inputs.instance_index = uint(gl_InstanceID);
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..0df97fa
--- /dev/null
+++ b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.glsl
@@ -0,0 +1,38 @@
+#version 310 es
+precision mediump float;
+
+struct VertexInputs {
+  uint vertex_index;
+  uint instance_index;
+};
+struct tint_symbol_2 {
+  uint vertex_index;
+  uint instance_index;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(VertexInputs inputs) {
+  uint foo = (inputs.vertex_index + inputs.instance_index);
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  VertexInputs tint_symbol_4 = VertexInputs(tint_symbol_1.vertex_index, tint_symbol_1.instance_index);
+  vec4 inner_result = tint_symbol_inner(tint_symbol_4);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.vertex_index = uint(gl_VertexID);
+  inputs.instance_index = uint(gl_InstanceID);
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_input_locations.wgsl.expected.glsl b/test/shader_io/vertex_input_locations.wgsl.expected.glsl
new file mode 100644
index 0000000..4a1499a
--- /dev/null
+++ b/test/shader_io/vertex_input_locations.wgsl.expected.glsl
@@ -0,0 +1,44 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(int loc0, uint loc1, float loc2, vec4 loc3) {
+  int i = loc0;
+  uint u = loc1;
+  float f = loc2;
+  vec4 v = loc3;
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  vec4 inner_result = tint_symbol_inner(tint_symbol_1.loc0, tint_symbol_1.loc1, tint_symbol_1.loc2, tint_symbol_1.loc3);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+in int loc0;
+in uint loc1;
+in float loc2;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc2 = loc2;
+  inputs.loc3 = loc3;
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl b/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..21dfce3
--- /dev/null
+++ b/test/shader_io/vertex_input_locations_struct.wgsl.expected.glsl
@@ -0,0 +1,51 @@
+#version 310 es
+precision mediump float;
+
+struct VertexInputs {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(VertexInputs inputs) {
+  int i = inputs.loc0;
+  uint u = inputs.loc1;
+  float f = inputs.loc2;
+  vec4 v = inputs.loc3;
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  VertexInputs tint_symbol_4 = VertexInputs(tint_symbol_1.loc0, tint_symbol_1.loc1, tint_symbol_1.loc2, tint_symbol_1.loc3);
+  vec4 inner_result = tint_symbol_inner(tint_symbol_4);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+in int loc0;
+in uint loc1;
+in float loc2;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc2 = loc2;
+  inputs.loc3 = loc3;
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_input_mixed.wgsl.expected.glsl b/test/shader_io/vertex_input_mixed.wgsl.expected.glsl
new file mode 100644
index 0000000..e1e518d
--- /dev/null
+++ b/test/shader_io/vertex_input_mixed.wgsl.expected.glsl
@@ -0,0 +1,59 @@
+#version 310 es
+precision mediump float;
+
+struct VertexInputs0 {
+  uint vertex_index;
+  int loc0;
+};
+struct VertexInputs1 {
+  float loc2;
+  vec4 loc3;
+};
+struct tint_symbol_2 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+  uint vertex_index;
+  uint instance_index;
+};
+struct tint_symbol_3 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner(VertexInputs0 inputs0, uint loc1, uint instance_index, VertexInputs1 inputs1) {
+  uint foo = (inputs0.vertex_index + instance_index);
+  int i = inputs0.loc0;
+  uint u = loc1;
+  float f = inputs1.loc2;
+  vec4 v = inputs1.loc3;
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1) {
+  VertexInputs0 tint_symbol_4 = VertexInputs0(tint_symbol_1.vertex_index, tint_symbol_1.loc0);
+  VertexInputs1 tint_symbol_5 = VertexInputs1(tint_symbol_1.loc2, tint_symbol_1.loc3);
+  vec4 inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.loc1, tint_symbol_1.instance_index, tint_symbol_5);
+  tint_symbol_3 wrapper_result = tint_symbol_3(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+in int loc0;
+in uint loc1;
+in float loc2;
+in vec4 loc3;
+void main() {
+  tint_symbol_2 inputs;
+  inputs.loc0 = loc0;
+  inputs.loc1 = loc1;
+  inputs.loc2 = loc2;
+  inputs.loc3 = loc3;
+  inputs.vertex_index = uint(gl_VertexID);
+  inputs.instance_index = uint(gl_InstanceID);
+  tint_symbol_3 outputs;
+  outputs = tint_symbol(inputs);
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_output_builtins.wgsl.expected.glsl b/test/shader_io/vertex_output_builtins.wgsl.expected.glsl
new file mode 100644
index 0000000..99f3730
--- /dev/null
+++ b/test/shader_io/vertex_output_builtins.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+#version 310 es
+precision mediump float;
+
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  return vec4(1.0f, 2.0f, 3.0f, 4.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  gl_Position = outputs.value;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..824c176
--- /dev/null
+++ b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+#version 310 es
+precision mediump float;
+
+struct VertexOutputs {
+  vec4 position;
+};
+struct tint_symbol_1 {
+  vec4 position;
+};
+
+VertexOutputs tint_symbol_inner() {
+  VertexOutputs tint_symbol_2 = VertexOutputs(vec4(1.0f, 2.0f, 3.0f, 4.0f));
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  VertexOutputs inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.position = inner_result.position;
+  return wrapper_result;
+}
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  gl_Position = outputs.position;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl b/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl
new file mode 100644
index 0000000..13ead49
--- /dev/null
+++ b/test/shader_io/vertex_output_locations_struct.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+precision mediump float;
+
+struct VertexOutputs {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+  vec4 position;
+};
+struct tint_symbol_1 {
+  int loc0;
+  uint loc1;
+  float loc2;
+  vec4 loc3;
+  vec4 position;
+};
+
+VertexOutputs tint_symbol_inner() {
+  VertexOutputs tint_symbol_2 = VertexOutputs(1, 1u, 1.0f, vec4(1.0f, 2.0f, 3.0f, 4.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  return tint_symbol_2;
+}
+
+tint_symbol_1 tint_symbol() {
+  VertexOutputs inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(0, 0u, 0.0f, vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.loc0 = inner_result.loc0;
+  wrapper_result.loc1 = inner_result.loc1;
+  wrapper_result.loc2 = inner_result.loc2;
+  wrapper_result.loc3 = inner_result.loc3;
+  wrapper_result.position = inner_result.position;
+  return wrapper_result;
+}
+out int loc0;
+out uint loc1;
+out float loc2;
+out vec4 loc3;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  loc0 = outputs.loc0;
+  loc1 = outputs.loc1;
+  loc2 = outputs.loc2;
+  loc3 = outputs.loc3;
+  gl_Position = outputs.position;
+  gl_Position.y = -gl_Position.y;
+}
+
+
diff --git a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl
new file mode 100644
index 0000000..638e6fc
--- /dev/null
+++ b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int arr[];
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl
new file mode 100644
index 0000000..638e6fc
--- /dev/null
+++ b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int arr[];
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/statements/assign/phony/call.wgsl.expected.glsl b/test/statements/assign/phony/call.wgsl.expected.glsl
new file mode 100644
index 0000000..777f222
--- /dev/null
+++ b/test/statements/assign/phony/call.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+int f(int a, int b, int c) {
+  return ((a * b) + c);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  f(1, 2, 3);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl b/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl
new file mode 100644
index 0000000..a1fc4c9
--- /dev/null
+++ b/test/statements/assign/phony/multiple_side_effects.wgsl.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+int f(int a, int b, int c) {
+  return ((a * b) + c);
+}
+
+void phony_sink(int p0, int p1, int p2) {
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  phony_sink(f(1, 2, 3), f(4, 5, 6), f(7, f(8, 9, 10), 11));
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl b/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl
new file mode 100644
index 0000000..c72d1b6
--- /dev/null
+++ b/test/statements/assign/phony/storage_buffer.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) buffer S_1 {
+  int i;
+} s;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl b/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl
new file mode 100644
index 0000000..db601bc
--- /dev/null
+++ b/test/statements/assign/phony/uniform_buffer.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+
+layout (binding = 0) uniform S_1 {
+  int i;
+} u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/statements/for/basic.wgsl.expected.glsl b/test/statements/for/basic.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/basic.wgsl.expected.glsl
diff --git a/test/statements/for/complex.wgsl.expected.glsl b/test/statements/for/complex.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/complex.wgsl.expected.glsl
diff --git a/test/statements/for/condition.wgsl.expected.glsl b/test/statements/for/condition.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/condition.wgsl.expected.glsl
diff --git a/test/statements/for/continuing.wgsl.expected.glsl b/test/statements/for/continuing.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/continuing.wgsl.expected.glsl
diff --git a/test/statements/for/empty.wgsl.expected.glsl b/test/statements/for/empty.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/empty.wgsl.expected.glsl
diff --git a/test/statements/for/initializer.wgsl.expected.glsl b/test/statements/for/initializer.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/initializer.wgsl.expected.glsl
diff --git a/test/statements/for/scoping.wgsl.expected.glsl b/test/statements/for/scoping.wgsl.expected.glsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/statements/for/scoping.wgsl.expected.glsl
diff --git a/test/statements/switch/common.wgsl.expected.glsl b/test/statements/switch/common.wgsl.expected.glsl
new file mode 100644
index 0000000..7450348
--- /dev/null
+++ b/test/statements/switch/common.wgsl.expected.glsl
@@ -0,0 +1,32 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int i = 0;
+  int result = 0;
+  switch(i) {
+    case 0: {
+      result = 10;
+      break;
+    }
+    case 1: {
+      result = 22;
+      break;
+    }
+    case 2: {
+      result = 33;
+      break;
+    }
+    default: {
+      result = 44;
+      break;
+    }
+  }
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/statements/switch/fallthrough.wgsl.expected.glsl b/test/statements/switch/fallthrough.wgsl.expected.glsl
new file mode 100644
index 0000000..6302c00
--- /dev/null
+++ b/test/statements/switch/fallthrough.wgsl.expected.glsl
@@ -0,0 +1,21 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int i = 0;
+  switch(i) {
+    case 0: {
+      /* fallthrough */
+    }
+    default: {
+      break;
+    }
+  }
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/statements/switch/only_default_case.wgsl.expected.glsl b/test/statements/switch/only_default_case.wgsl.expected.glsl
new file mode 100644
index 0000000..029765c
--- /dev/null
+++ b/test/statements/switch/only_default_case.wgsl.expected.glsl
@@ -0,0 +1,20 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void f() {
+  int i = 0;
+  int result = 0;
+  switch(i) {
+    default: {
+      result = 44;
+      break;
+    }
+  }
+  return;
+}
+void main() {
+  f();
+}
+
+
diff --git a/test/struct/type_constructor.wgsl.expected.glsl b/test/struct/type_constructor.wgsl.expected.glsl
new file mode 100644
index 0000000..be5a089
--- /dev/null
+++ b/test/struct/type_constructor.wgsl.expected.glsl
@@ -0,0 +1,66 @@
+#version 310 es
+precision mediump float;
+
+struct S1 {
+  int a;
+  int b;
+  int c;
+  int d;
+};
+struct S2 {
+  int e;
+  S1 f;
+};
+struct S3 {
+  int g;
+  S1 h;
+  S2 i;
+};
+struct T {
+  int a[2];
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int x = 42;
+  S1 empty = S1(0, 0, 0, 0);
+  S1 nonempty = S1(1, 2, 3, 4);
+  S1 nonempty_with_expr = S1(1, x, (x + 1), nonempty.d);
+  S3 nested_empty = S3(0, S1(0, 0, 0, 0), S2(0, S1(0, 0, 0, 0)));
+  S1 tint_symbol_1 = S1(2, 3, 4, 5);
+  S1 tint_symbol_2 = S1(7, 8, 9, 10);
+  S2 tint_symbol_3 = S2(6, tint_symbol_2);
+  S3 nested_nonempty = S3(1, tint_symbol_1, tint_symbol_3);
+  S1 tint_symbol_4 = S1(2, x, (x + 1), nested_nonempty.i.f.d);
+  S2 tint_symbol_5 = S2(6, nonempty);
+  S3 nested_nonempty_with_expr = S3(1, tint_symbol_4, tint_symbol_5);
+  S1 tint_symbol_6 = S1(0, 0, 0, 0);
+  int subexpr_empty = tint_symbol_6.a;
+  S1 tint_symbol_7 = S1(1, 2, 3, 4);
+  int subexpr_nonempty = tint_symbol_7.b;
+  S1 tint_symbol_8 = S1(1, x, (x + 1), nonempty.d);
+  int subexpr_nonempty_with_expr = tint_symbol_8.c;
+  S2 tint_symbol_9 = S2(0, S1(0, 0, 0, 0));
+  S1 subexpr_nested_empty = tint_symbol_9.f;
+  S1 tint_symbol_10 = S1(2, 3, 4, 5);
+  S2 tint_symbol_11 = S2(1, tint_symbol_10);
+  S1 subexpr_nested_nonempty = tint_symbol_11.f;
+  S1 tint_symbol_12 = S1(2, x, (x + 1), nested_nonempty.i.f.d);
+  S2 tint_symbol_13 = S2(1, tint_symbol_12);
+  S1 subexpr_nested_nonempty_with_expr = tint_symbol_13.f;
+  T aosoa_empty[2] = T[2](T(int[2](0, 0)), T(int[2](0, 0)));
+  int tint_symbol_14[2] = int[2](1, 2);
+  T tint_symbol_15 = T(tint_symbol_14);
+  int tint_symbol_16[2] = int[2](3, 4);
+  T tint_symbol_17 = T(tint_symbol_16);
+  T aosoa_nonempty[2] = T[2](tint_symbol_15, tint_symbol_17);
+  int tint_symbol_18[2] = int[2](1, (aosoa_nonempty[0].a[0] + 1));
+  T tint_symbol_19 = T(tint_symbol_18);
+  T aosoa_nonempty_with_expr[2] = T[2](tint_symbol_19, aosoa_nonempty[1]);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/function_scope_declarations.wgsl.expected.glsl b/test/types/function_scope_declarations.wgsl.expected.glsl
new file mode 100644
index 0000000..adf62b7
--- /dev/null
+++ b/test/types/function_scope_declarations.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  float a;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  bool bool_var = false;
+  bool bool_let = false;
+  int i32_var = 0;
+  int i32_let = 0;
+  uint u32_var = 0u;
+  uint u32_let = 0u;
+  float f32_var = 0.0f;
+  float f32_let = 0.0f;
+  ivec2 v2i32_var = ivec2(0, 0);
+  ivec2 v2i32_let = ivec2(0, 0);
+  uvec3 v3u32_var = uvec3(0u, 0u, 0u);
+  uvec3 v3u32_let = uvec3(0u, 0u, 0u);
+  vec4 v4f32_var = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  vec4 v4f32_let = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  mat2x3 m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  mat3x4 m3x4_let = mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  float arr_let[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  S struct_var = S(0.0f);
+  S struct_let = S(0.0f);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/function_scope_var_conversions.wgsl.expected.glsl b/test/types/function_scope_var_conversions.wgsl.expected.glsl
new file mode 100644
index 0000000..bc199a8
--- /dev/null
+++ b/test/types/function_scope_var_conversions.wgsl.expected.glsl
@@ -0,0 +1,42 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  bool bool_var1 = bool(123u);
+  bool bool_var2 = bool(123);
+  bool bool_var3 = bool(123.0f);
+  int i32_var1 = int(123u);
+  int i32_var2 = int(123.0f);
+  int i32_var3 = int(true);
+  uint u32_var1 = uint(123);
+  uint u32_var2 = uint(123.0f);
+  uint u32_var3 = uint(true);
+  bvec3 v3bool_var1 = bvec3(uvec3((123u).xxx));
+  bvec3 v3bool_var11 = bvec3(uvec3((1234u).xxx));
+  bvec3 v3bool_var2 = bvec3(ivec3((123).xxx));
+  bvec3 v3bool_var3 = bvec3(vec3((123.0f).xxx));
+  ivec3 v3i32_var1 = ivec3(uvec3((123u).xxx));
+  ivec3 v3i32_var2 = ivec3(vec3((123.0f).xxx));
+  ivec3 v3i32_var3 = ivec3(bvec3((true).xxx));
+  uvec3 v3u32_var1 = uvec3(ivec3((123).xxx));
+  uvec3 v3u32_var2 = uvec3(vec3((123.0f).xxx));
+  uvec3 v3u32_var3 = uvec3(bvec3((true).xxx));
+  bvec3 v3bool_var4 = bvec3(bvec2(vec2((123.0f).xx)), true);
+  bvec4 v4bool_var5 = bvec4(bvec2(vec2(123.0f, 0.0f)), bvec2(true, bool(float(0.0f))));
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:15: 'scalar swizzle' : not supported with this profile: es
+ERROR: 0:15: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/types/module_scope_let.wgsl.expected.glsl b/test/types/module_scope_let.wgsl.expected.glsl
new file mode 100644
index 0000000..bd84301
--- /dev/null
+++ b/test/types/module_scope_let.wgsl.expected.glsl
@@ -0,0 +1,27 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  float a;
+};
+
+const bool bool_let = false;
+const int i32_let = 0;
+const uint u32_let = 0u;
+const float f32_let = 0.0f;
+const ivec2 v2i32_let = ivec2(0, 0);
+const uvec3 v3u32_let = uvec3(0u, 0u, 0u);
+const vec4 v4f32_let = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+const mat3x4 m3x4_let = mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+const float arr_let[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+const S struct_let = S(0.0f);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/module_scope_var.wgsl.expected.glsl b/test/types/module_scope_var.wgsl.expected.glsl
new file mode 100644
index 0000000..450d5cd
--- /dev/null
+++ b/test/types/module_scope_var.wgsl.expected.glsl
@@ -0,0 +1,39 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  float a;
+};
+
+bool bool_var = false;
+int i32_var = 0;
+uint u32_var = 0u;
+float f32_var = 0.0f;
+ivec2 v2i32_var = ivec2(0, 0);
+uvec3 v3u32_var = uvec3(0u, 0u, 0u);
+vec4 v4f32_var = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+mat2x3 m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+S struct_var = S(0.0f);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  bool_var = false;
+  i32_var = 0;
+  u32_var = 0u;
+  f32_var = 0.0f;
+  v2i32_var = ivec2(0, 0);
+  v3u32_var = uvec3(0u, 0u, 0u);
+  v4f32_var = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float tint_symbol_1[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  arr_var = tint_symbol_1;
+  S tint_symbol_2 = S(0.0f);
+  struct_var = tint_symbol_2;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/module_scope_var_conversions.wgsl.expected.glsl b/test/types/module_scope_var_conversions.wgsl.expected.glsl
new file mode 100644
index 0000000..f846718
--- /dev/null
+++ b/test/types/module_scope_var_conversions.wgsl.expected.glsl
@@ -0,0 +1,62 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+bool bool_var1 = bool(1u);
+bool bool_var2 = bool(1);
+bool bool_var3 = bool(1.0f);
+int i32_var1 = int(1u);
+int i32_var2 = int(1.0f);
+int i32_var3 = int(true);
+uint u32_var1 = uint(1);
+uint u32_var2 = uint(1.0f);
+uint u32_var3 = uint(true);
+bvec3 v3bool_var1 = bvec3(uvec3((1u).xxx));
+bvec3 v3bool_var2 = bvec3(ivec3((1).xxx));
+bvec3 v3bool_var3 = bvec3(vec3((1.0f).xxx));
+ivec3 v3i32_var1 = ivec3(uvec3((1u).xxx));
+ivec3 v3i32_var2 = ivec3(vec3((1.0f).xxx));
+ivec3 v3i32_var3 = ivec3(bvec3((true).xxx));
+uvec3 v3u32_var1 = uvec3(ivec3((1).xxx));
+uvec3 v3u32_var2 = uvec3(vec3((1.0f).xxx));
+uvec3 v3u32_var3 = uvec3(bvec3((true).xxx));
+bvec3 v3bool_var4 = bvec3(bvec2(vec2((123.0f).xx)), true);
+bvec4 v4bool_var5 = bvec4(bvec2(vec2(123.0f, 0.0f)), bvec2(true, bool(float(0.0f))));
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  bool_var1 = false;
+  bool_var2 = false;
+  bool_var3 = false;
+  i32_var1 = 0;
+  i32_var2 = 0;
+  i32_var3 = 0;
+  u32_var1 = 0u;
+  u32_var2 = 0u;
+  u32_var3 = 0u;
+  v3bool_var1 = bvec3(false, false, false);
+  v3bool_var2 = bvec3(false, false, false);
+  v3bool_var3 = bvec3(false, false, false);
+  v3bool_var4 = bvec3(false, false, false);
+  v4bool_var5 = bvec4(false, false, false, false);
+  v3i32_var1 = ivec3(0, 0, 0);
+  v3i32_var2 = ivec3(0, 0, 0);
+  v3i32_var3 = ivec3(0, 0, 0);
+  v3u32_var1 = uvec3(0u, 0u, 0u);
+  v3u32_var2 = uvec3(0u, 0u, 0u);
+  v3u32_var3 = uvec3(0u, 0u, 0u);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:13: 'scalar swizzle' : not supported with this profile: es
+ERROR: 0:13: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/types/module_scope_var_initializers.wgsl.expected.glsl b/test/types/module_scope_var_initializers.wgsl.expected.glsl
new file mode 100644
index 0000000..450d5cd
--- /dev/null
+++ b/test/types/module_scope_var_initializers.wgsl.expected.glsl
@@ -0,0 +1,39 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  float a;
+};
+
+bool bool_var = false;
+int i32_var = 0;
+uint u32_var = 0u;
+float f32_var = 0.0f;
+ivec2 v2i32_var = ivec2(0, 0);
+uvec3 v3u32_var = uvec3(0u, 0u, 0u);
+vec4 v4f32_var = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+mat2x3 m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+float arr_var[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+S struct_var = S(0.0f);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  bool_var = false;
+  i32_var = 0;
+  u32_var = 0u;
+  f32_var = 0.0f;
+  v2i32_var = ivec2(0, 0);
+  v3u32_var = uvec3(0u, 0u, 0u);
+  v4f32_var = vec4(0.0f, 0.0f, 0.0f, 0.0f);
+  m2x3_var = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  float tint_symbol_1[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
+  arr_var = tint_symbol_1;
+  S tint_symbol_2 = S(0.0f);
+  struct_var = tint_symbol_2;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/parameters.wgsl.expected.glsl b/test/types/parameters.wgsl.expected.glsl
new file mode 100644
index 0000000..166c6c7
--- /dev/null
+++ b/test/types/parameters.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  float a;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/return_types.wgsl.expected.glsl b/test/types/return_types.wgsl.expected.glsl
new file mode 100644
index 0000000..166c6c7
--- /dev/null
+++ b/test/types/return_types.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  float a;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/sampler.wgsl.expected.glsl b/test/types/sampler.wgsl.expected.glsl
new file mode 100644
index 0000000..fe64871
--- /dev/null
+++ b/test/types/sampler.wgsl.expected.glsl
@@ -0,0 +1,15 @@
+#version 310 es
+precision mediump float;
+
+
+
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/struct_members.wgsl.expected.glsl b/test/types/struct_members.wgsl.expected.glsl
new file mode 100644
index 0000000..58b993d
--- /dev/null
+++ b/test/types/struct_members.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+#version 310 es
+precision mediump float;
+
+struct S_inner {
+  float a;
+};
+struct S {
+  bool member_bool;
+  int member_i32;
+  uint member_u32;
+  float member_f32;
+  ivec2 member_v2i32;
+  uvec3 member_v3u32;
+  vec4 member_v4f32;
+  mat2x3 member_m2x3;
+  float member_arr[4];
+  S_inner member_struct;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  S s = S(false, 0, 0u, 0.0f, ivec2(0, 0), uvec3(0u, 0u, 0u), vec4(0.0f, 0.0f, 0.0f, 0.0f), mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f), float[4](0.0f, 0.0f, 0.0f, 0.0f), S_inner(0.0f));
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/depth/2d.wgsl.expected.glsl b/test/types/texture/depth/2d.wgsl.expected.glsl
new file mode 100644
index 0000000..2b6d25d
--- /dev/null
+++ b/test/types/texture/depth/2d.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D t_f;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/depth/2d_array.wgsl.expected.glsl b/test/types/texture/depth/2d_array.wgsl.expected.glsl
new file mode 100644
index 0000000..6e356e1
--- /dev/null
+++ b/test/types/texture/depth/2d_array.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray t_f;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/depth/cube.wgsl.expected.glsl b/test/types/texture/depth/cube.wgsl.expected.glsl
new file mode 100644
index 0000000..cb259d8
--- /dev/null
+++ b/test/types/texture/depth/cube.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube t_f;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/depth/cube_array.wgsl.expected.glsl b/test/types/texture/depth/cube_array.wgsl.expected.glsl
new file mode 100644
index 0000000..1121d73
--- /dev/null
+++ b/test/types/texture/depth/cube_array.wgsl.expected.glsl
@@ -0,0 +1,23 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray t_f;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/types/texture/multisampled/2d.wgsl.expected.glsl b/test/types/texture/multisampled/2d.wgsl.expected.glsl
new file mode 100644
index 0000000..460c59c
--- /dev/null
+++ b/test/types/texture/multisampled/2d.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DMS t_f;
+uniform highp isampler2DMS t_i;
+uniform highp usampler2DMS t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/sampled/1d.wgsl.expected.glsl b/test/types/texture/sampled/1d.wgsl.expected.glsl
new file mode 100644
index 0000000..a5b0813
--- /dev/null
+++ b/test/types/texture/sampled/1d.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp sampler1D t_f;
+uniform highp isampler1D t_i;
+uniform highp usampler1D t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'sampler1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/types/texture/sampled/2d.wgsl.expected.glsl b/test/types/texture/sampled/2d.wgsl.expected.glsl
new file mode 100644
index 0000000..ce56a24
--- /dev/null
+++ b/test/types/texture/sampled/2d.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2D t_f;
+uniform highp isampler2D t_i;
+uniform highp usampler2D t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/sampled/2d_array.wgsl.expected.glsl b/test/types/texture/sampled/2d_array.wgsl.expected.glsl
new file mode 100644
index 0000000..3df57e9
--- /dev/null
+++ b/test/types/texture/sampled/2d_array.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler2DArray t_f;
+uniform highp isampler2DArray t_i;
+uniform highp usampler2DArray t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/sampled/3d.wgsl.expected.glsl b/test/types/texture/sampled/3d.wgsl.expected.glsl
new file mode 100644
index 0000000..48ce633
--- /dev/null
+++ b/test/types/texture/sampled/3d.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+uniform highp sampler3D t_f;
+uniform highp isampler3D t_i;
+uniform highp usampler3D t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/sampled/cube.wgsl.expected.glsl b/test/types/texture/sampled/cube.wgsl.expected.glsl
new file mode 100644
index 0000000..daa4f95
--- /dev/null
+++ b/test/types/texture/sampled/cube.wgsl.expected.glsl
@@ -0,0 +1,16 @@
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCube t_f;
+uniform highp isamplerCube t_i;
+uniform highp usamplerCube t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/sampled/cube_array.wgsl.expected.glsl b/test/types/texture/sampled/cube_array.wgsl.expected.glsl
new file mode 100644
index 0000000..dada745
--- /dev/null
+++ b/test/types/texture/sampled/cube_array.wgsl.expected.glsl
@@ -0,0 +1,25 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp samplerCubeArray t_f;
+uniform highp isamplerCubeArray t_i;
+uniform highp usamplerCubeArray t_u;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'samplerCubeArray' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/types/texture/storage/1d.wgsl.expected.glsl b/test/types/texture/storage/1d.wgsl.expected.glsl
new file mode 100644
index 0000000..a854f43
--- /dev/null
+++ b/test/types/texture/storage/1d.wgsl.expected.glsl
@@ -0,0 +1,38 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image1D t_rgba8unorm;
+uniform highp writeonly image1D t_rgba8snorm;
+uniform highp writeonly image1D t_rgba8uint;
+uniform highp writeonly image1D t_rgba8sint;
+uniform highp writeonly image1D t_rgba16uint;
+uniform highp writeonly image1D t_rgba16sint;
+uniform highp writeonly image1D t_rgba16float;
+uniform highp writeonly image1D t_r32uint;
+uniform highp writeonly image1D t_r32sint;
+uniform highp writeonly image1D t_r32float;
+uniform highp writeonly image1D t_rg32uint;
+uniform highp writeonly image1D t_rg32sint;
+uniform highp writeonly image1D t_rg32float;
+uniform highp writeonly image1D t_rgba32uint;
+uniform highp writeonly image1D t_rgba32sint;
+uniform highp writeonly image1D t_rgba32float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: 'image1D' : Reserved word. 
+ERROR: 0:4: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/types/texture/storage/2d.wgsl.expected.glsl b/test/types/texture/storage/2d.wgsl.expected.glsl
new file mode 100644
index 0000000..1103c8c
--- /dev/null
+++ b/test/types/texture/storage/2d.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2D t_rgba8unorm;
+uniform highp writeonly image2D t_rgba8snorm;
+uniform highp writeonly image2D t_rgba8uint;
+uniform highp writeonly image2D t_rgba8sint;
+uniform highp writeonly image2D t_rgba16uint;
+uniform highp writeonly image2D t_rgba16sint;
+uniform highp writeonly image2D t_rgba16float;
+uniform highp writeonly image2D t_r32uint;
+uniform highp writeonly image2D t_r32sint;
+uniform highp writeonly image2D t_r32float;
+uniform highp writeonly image2D t_rg32uint;
+uniform highp writeonly image2D t_rg32sint;
+uniform highp writeonly image2D t_rg32float;
+uniform highp writeonly image2D t_rgba32uint;
+uniform highp writeonly image2D t_rgba32sint;
+uniform highp writeonly image2D t_rgba32float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/storage/2d_array.wgsl.expected.glsl b/test/types/texture/storage/2d_array.wgsl.expected.glsl
new file mode 100644
index 0000000..f047dd7
--- /dev/null
+++ b/test/types/texture/storage/2d_array.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image2DArray t_rgba8unorm;
+uniform highp writeonly image2DArray t_rgba8snorm;
+uniform highp writeonly image2DArray t_rgba8uint;
+uniform highp writeonly image2DArray t_rgba8sint;
+uniform highp writeonly image2DArray t_rgba16uint;
+uniform highp writeonly image2DArray t_rgba16sint;
+uniform highp writeonly image2DArray t_rgba16float;
+uniform highp writeonly image2DArray t_r32uint;
+uniform highp writeonly image2DArray t_r32sint;
+uniform highp writeonly image2DArray t_r32float;
+uniform highp writeonly image2DArray t_rg32uint;
+uniform highp writeonly image2DArray t_rg32sint;
+uniform highp writeonly image2DArray t_rg32float;
+uniform highp writeonly image2DArray t_rgba32uint;
+uniform highp writeonly image2DArray t_rgba32sint;
+uniform highp writeonly image2DArray t_rgba32float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/types/texture/storage/3d.wgsl.expected.glsl b/test/types/texture/storage/3d.wgsl.expected.glsl
new file mode 100644
index 0000000..edb725a
--- /dev/null
+++ b/test/types/texture/storage/3d.wgsl.expected.glsl
@@ -0,0 +1,29 @@
+#version 310 es
+precision mediump float;
+
+uniform highp writeonly image3D t_rgba8unorm;
+uniform highp writeonly image3D t_rgba8snorm;
+uniform highp writeonly image3D t_rgba8uint;
+uniform highp writeonly image3D t_rgba8sint;
+uniform highp writeonly image3D t_rgba16uint;
+uniform highp writeonly image3D t_rgba16sint;
+uniform highp writeonly image3D t_rgba16float;
+uniform highp writeonly image3D t_r32uint;
+uniform highp writeonly image3D t_r32sint;
+uniform highp writeonly image3D t_r32float;
+uniform highp writeonly image3D t_rg32uint;
+uniform highp writeonly image3D t_rg32sint;
+uniform highp writeonly image3D t_rg32float;
+uniform highp writeonly image3D t_rgba32uint;
+uniform highp writeonly image3D t_rgba32sint;
+uniform highp writeonly image3D t_rgba32float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/inferred/function.wgsl.expected.glsl b/test/var/inferred/function.wgsl.expected.glsl
new file mode 100644
index 0000000..188a6da
--- /dev/null
+++ b/test/var/inferred/function.wgsl.expected.glsl
@@ -0,0 +1,28 @@
+#version 310 es
+precision mediump float;
+
+struct MyStruct {
+  float f1;
+};
+struct tint_symbol_1 {
+  vec4 value;
+};
+
+vec4 tint_symbol_inner() {
+  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
+}
+
+tint_symbol_1 tint_symbol() {
+  vec4 inner_result = tint_symbol_inner();
+  tint_symbol_1 wrapper_result = tint_symbol_1(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+out vec4 value;
+void main() {
+  tint_symbol_1 outputs;
+  outputs = tint_symbol();
+  value = outputs.value;
+}
+
+
diff --git a/test/var/initialization/function/array.wgsl.expected.glsl b/test/var/initialization/function/array.wgsl.expected.glsl
new file mode 100644
index 0000000..7146e7d
--- /dev/null
+++ b/test/var/initialization/function/array.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int v[3] = int[3](0, 0, 0);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/function/matrix.wgsl.expected.glsl b/test/var/initialization/function/matrix.wgsl.expected.glsl
new file mode 100644
index 0000000..34d0c8a
--- /dev/null
+++ b/test/var/initialization/function/matrix.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  mat2x3 v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/function/scalar.wgsl.expected.glsl b/test/var/initialization/function/scalar.wgsl.expected.glsl
new file mode 100644
index 0000000..8307587
--- /dev/null
+++ b/test/var/initialization/function/scalar.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  int v = 0;
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/function/struct.wgsl.expected.glsl b/test/var/initialization/function/struct.wgsl.expected.glsl
new file mode 100644
index 0000000..a81c735
--- /dev/null
+++ b/test/var/initialization/function/struct.wgsl.expected.glsl
@@ -0,0 +1,18 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int a;
+  float b;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  S v = S(0, 0.0f);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/function/vector.wgsl.expected.glsl b/test/var/initialization/function/vector.wgsl.expected.glsl
new file mode 100644
index 0000000..f475c7c
--- /dev/null
+++ b/test/var/initialization/function/vector.wgsl.expected.glsl
@@ -0,0 +1,13 @@
+#version 310 es
+precision mediump float;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  ivec3 v = ivec3(0, 0, 0);
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/private/array.wgsl.expected.glsl b/test/var/initialization/private/array.wgsl.expected.glsl
new file mode 100644
index 0000000..e5de39b
--- /dev/null
+++ b/test/var/initialization/private/array.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+int v[3] = int[3](0, 0, 0);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/private/matrix.wgsl.expected.glsl b/test/var/initialization/private/matrix.wgsl.expected.glsl
new file mode 100644
index 0000000..3771d7b
--- /dev/null
+++ b/test/var/initialization/private/matrix.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+mat2x3 v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/private/scalar.wgsl.expected.glsl b/test/var/initialization/private/scalar.wgsl.expected.glsl
new file mode 100644
index 0000000..4e93b5e
--- /dev/null
+++ b/test/var/initialization/private/scalar.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+int v = 0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/private/struct.wgsl.expected.glsl b/test/var/initialization/private/struct.wgsl.expected.glsl
new file mode 100644
index 0000000..5d17f80
--- /dev/null
+++ b/test/var/initialization/private/struct.wgsl.expected.glsl
@@ -0,0 +1,19 @@
+#version 310 es
+precision mediump float;
+
+struct S {
+  int a;
+  float b;
+};
+
+S v = S(0, 0.0f);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/private/vector.wgsl.expected.glsl b/test/var/initialization/private/vector.wgsl.expected.glsl
new file mode 100644
index 0000000..ff32b2e
--- /dev/null
+++ b/test/var/initialization/private/vector.wgsl.expected.glsl
@@ -0,0 +1,14 @@
+#version 310 es
+precision mediump float;
+
+ivec3 v = ivec3(0, 0, 0);
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/initialization/workgroup/array.wgsl.expected.glsl b/test/var/initialization/workgroup/array.wgsl.expected.glsl
new file mode 100644
index 0000000..803d29b
--- /dev/null
+++ b/test/var/initialization/workgroup/array.wgsl.expected.glsl
@@ -0,0 +1,39 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int v[3];
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void tint_symbol_inner(uint local_invocation_index) {
+  {
+    for(uint idx = local_invocation_index; (idx < 3u); idx = (idx + 1u)) {
+      uint i = idx;
+      v[i] = 0;
+    }
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/initialization/workgroup/matrix.wgsl.expected.glsl b/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
new file mode 100644
index 0000000..427c0d3
--- /dev/null
+++ b/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared mat2x3 v;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void tint_symbol_inner(uint local_invocation_index) {
+  {
+    v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/initialization/workgroup/scalar.wgsl.expected.glsl b/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
new file mode 100644
index 0000000..398d676
--- /dev/null
+++ b/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int v;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void tint_symbol_inner(uint local_invocation_index) {
+  {
+    v = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/initialization/workgroup/struct.wgsl.expected.glsl b/test/var/initialization/workgroup/struct.wgsl.expected.glsl
new file mode 100644
index 0000000..f7cd58a
--- /dev/null
+++ b/test/var/initialization/workgroup/struct.wgsl.expected.glsl
@@ -0,0 +1,42 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+struct S {
+  int a;
+  float b;
+};
+
+groupshared S v;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void tint_symbol_inner(uint local_invocation_index) {
+  {
+    S tint_symbol_3 = S(0, 0.0f);
+    v = tint_symbol_3;
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:9: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/initialization/workgroup/vector.wgsl.expected.glsl b/test/var/initialization/workgroup/vector.wgsl.expected.glsl
new file mode 100644
index 0000000..6662b52
--- /dev/null
+++ b/test/var/initialization/workgroup/vector.wgsl.expected.glsl
@@ -0,0 +1,36 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared ivec3 v;
+
+struct tint_symbol_2 {
+  uint local_invocation_index;
+};
+
+void tint_symbol_inner(uint local_invocation_index) {
+  {
+    v = ivec3(0, 0, 0);
+  }
+  GroupMemoryBarrierWithGroupSync();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/named/no_init/bool.wgsl.expected.glsl b/test/var/override/named/no_init/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..da1fd24
--- /dev/null
+++ b/test/var/override/named/no_init/bool.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#error spec constant required for constant id 0
+#endif
+const bool o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 0  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/named/no_init/f32.wgsl.expected.glsl b/test/var/override/named/no_init/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..0f71961
--- /dev/null
+++ b/test/var/override/named/no_init/f32.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#error spec constant required for constant id 0
+#endif
+const float o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 0  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/named/no_init/i32.wgsl.expected.glsl b/test/var/override/named/no_init/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..0f490be
--- /dev/null
+++ b/test/var/override/named/no_init/i32.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#error spec constant required for constant id 0
+#endif
+const int o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 0  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/named/no_init/u32.wgsl.expected.glsl b/test/var/override/named/no_init/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..776a083
--- /dev/null
+++ b/test/var/override/named/no_init/u32.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#error spec constant required for constant id 0
+#endif
+const uint o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 0  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/named/val_init/bool.wgsl.expected.glsl b/test/var/override/named/val_init/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..b1c7c0a
--- /dev/null
+++ b/test/var/override/named/val_init/bool.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 true
+#endif
+const bool o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/val_init/f32.wgsl.expected.glsl b/test/var/override/named/val_init/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..29dff55
--- /dev/null
+++ b/test/var/override/named/val_init/f32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 1.0f
+#endif
+const float o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/val_init/i32.wgsl.expected.glsl b/test/var/override/named/val_init/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..edfc48c
--- /dev/null
+++ b/test/var/override/named/val_init/i32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 1
+#endif
+const int o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/val_init/u32.wgsl.expected.glsl b/test/var/override/named/val_init/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..65314db
--- /dev/null
+++ b/test/var/override/named/val_init/u32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 1u
+#endif
+const uint o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/zero_init/bool.wgsl.expected.glsl b/test/var/override/named/zero_init/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..99475b9
--- /dev/null
+++ b/test/var/override/named/zero_init/bool.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 false
+#endif
+const bool o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/zero_init/f32.wgsl.expected.glsl b/test/var/override/named/zero_init/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..13b7b84
--- /dev/null
+++ b/test/var/override/named/zero_init/f32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 0.0f
+#endif
+const float o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/zero_init/i32.wgsl.expected.glsl b/test/var/override/named/zero_init/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..40ad1ac
--- /dev/null
+++ b/test/var/override/named/zero_init/i32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 0
+#endif
+const int o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/named/zero_init/u32.wgsl.expected.glsl b/test/var/override/named/zero_init/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..90c4e53
--- /dev/null
+++ b/test/var/override/named/zero_init/u32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_0
+#define WGSL_SPEC_CONSTANT_0 0u
+#endif
+const uint o = WGSL_SPEC_CONSTANT_0;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/no_init/bool.wgsl.expected.glsl b/test/var/override/numbered/no_init/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..caf27de
--- /dev/null
+++ b/test/var/override/numbered/no_init/bool.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#error spec constant required for constant id 1234
+#endif
+const bool o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 1234  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/numbered/no_init/f32.wgsl.expected.glsl b/test/var/override/numbered/no_init/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..fc99ef9
--- /dev/null
+++ b/test/var/override/numbered/no_init/f32.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#error spec constant required for constant id 1234
+#endif
+const float o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 1234  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/numbered/no_init/i32.wgsl.expected.glsl b/test/var/override/numbered/no_init/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..54222e3
--- /dev/null
+++ b/test/var/override/numbered/no_init/i32.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#error spec constant required for constant id 1234
+#endif
+const int o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 1234  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/numbered/no_init/u32.wgsl.expected.glsl b/test/var/override/numbered/no_init/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..631b5f4
--- /dev/null
+++ b/test/var/override/numbered/no_init/u32.wgsl.expected.glsl
@@ -0,0 +1,26 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#error spec constant required for constant id 1234
+#endif
+const uint o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:5: '#error' : spec constant required for constant id 1234  
+ERROR: 0:6: '' : missing #endif 
+ERROR: 2 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/override/numbered/val_init/bool.wgsl.expected.glsl b/test/var/override/numbered/val_init/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..8991843
--- /dev/null
+++ b/test/var/override/numbered/val_init/bool.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 true
+#endif
+const bool o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/val_init/f32.wgsl.expected.glsl b/test/var/override/numbered/val_init/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..3e56eb0
--- /dev/null
+++ b/test/var/override/numbered/val_init/f32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 1.0f
+#endif
+const float o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/val_init/i32.wgsl.expected.glsl b/test/var/override/numbered/val_init/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..99a03ef
--- /dev/null
+++ b/test/var/override/numbered/val_init/i32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 1
+#endif
+const int o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/val_init/u32.wgsl.expected.glsl b/test/var/override/numbered/val_init/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..ab1ec93
--- /dev/null
+++ b/test/var/override/numbered/val_init/u32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 1u
+#endif
+const uint o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl b/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl
new file mode 100644
index 0000000..4f1f5d0
--- /dev/null
+++ b/test/var/override/numbered/zero_init/bool.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 false
+#endif
+const bool o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl b/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl
new file mode 100644
index 0000000..b108b60
--- /dev/null
+++ b/test/var/override/numbered/zero_init/f32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 0.0f
+#endif
+const float o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl b/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl
new file mode 100644
index 0000000..bece063
--- /dev/null
+++ b/test/var/override/numbered/zero_init/i32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 0
+#endif
+const int o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl b/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl
new file mode 100644
index 0000000..34d0432
--- /dev/null
+++ b/test/var/override/numbered/zero_init/u32.wgsl.expected.glsl
@@ -0,0 +1,17 @@
+#version 310 es
+precision mediump float;
+
+#ifndef WGSL_SPEC_CONSTANT_1234
+#define WGSL_SPEC_CONSTANT_1234 0u
+#endif
+const uint o = WGSL_SPEC_CONSTANT_1234;
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol() {
+  return;
+}
+void main() {
+  tint_symbol();
+}
+
+
diff --git a/test/var/uses/many_workgroup_vars.wgsl.expected.glsl b/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
new file mode 100644
index 0000000..479388b
--- /dev/null
+++ b/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
@@ -0,0 +1,334 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared mat2 m00;
+groupshared mat2 m01;
+groupshared mat2 m02;
+groupshared mat2 m03;
+groupshared mat2 m04;
+groupshared mat2 m05;
+groupshared mat2 m06;
+groupshared mat2 m07;
+groupshared mat2 m08;
+groupshared mat2 m09;
+groupshared mat2 m10;
+groupshared mat2 m11;
+groupshared mat2 m12;
+groupshared mat2 m13;
+groupshared mat2 m14;
+groupshared mat2 m15;
+groupshared mat2 m16;
+groupshared mat2 m17;
+groupshared mat2 m18;
+groupshared mat2 m19;
+groupshared mat2 m20;
+groupshared mat2 m21;
+groupshared mat2 m22;
+groupshared mat2 m23;
+groupshared mat2 m24;
+groupshared mat2 m25;
+groupshared mat2 m26;
+groupshared mat2 m27;
+groupshared mat2 m28;
+groupshared mat2 m29;
+groupshared mat2 m30;
+groupshared mat2 m31;
+groupshared mat2 m32;
+groupshared mat2 m33;
+groupshared mat2 m34;
+groupshared mat2 m35;
+groupshared mat2 m36;
+groupshared mat2 m37;
+groupshared mat2 m38;
+groupshared mat2 m39;
+groupshared mat2 m40;
+groupshared mat2 m41;
+groupshared mat2 m42;
+groupshared mat2 m43;
+groupshared mat2 m44;
+groupshared mat2 m45;
+groupshared mat2 m46;
+groupshared mat2 m47;
+groupshared mat2 m48;
+groupshared mat2 m49;
+groupshared mat2 m50;
+groupshared mat2 m51;
+groupshared mat2 m52;
+groupshared mat2 m53;
+groupshared mat2 m54;
+groupshared mat2 m55;
+groupshared mat2 m56;
+groupshared mat2 m57;
+groupshared mat2 m58;
+groupshared mat2 m59;
+groupshared mat2 m60;
+groupshared mat2 m61;
+groupshared mat2 m62;
+groupshared mat2 m63;
+groupshared mat2 m64;
+groupshared mat2 m65;
+groupshared mat2 m66;
+groupshared mat2 m67;
+groupshared mat2 m68;
+groupshared mat2 m69;
+groupshared mat2 m70;
+groupshared mat2 m71;
+groupshared mat2 m72;
+groupshared mat2 m73;
+groupshared mat2 m74;
+groupshared mat2 m75;
+groupshared mat2 m76;
+groupshared mat2 m77;
+groupshared mat2 m78;
+groupshared mat2 m79;
+groupshared mat2 m80;
+groupshared mat2 m81;
+groupshared mat2 m82;
+groupshared mat2 m83;
+groupshared mat2 m84;
+groupshared mat2 m85;
+groupshared mat2 m86;
+groupshared mat2 m87;
+groupshared mat2 m88;
+groupshared mat2 m89;
+groupshared mat2 m90;
+groupshared mat2 m91;
+groupshared mat2 m92;
+groupshared mat2 m93;
+groupshared mat2 m94;
+groupshared mat2 m95;
+groupshared mat2 m96;
+groupshared mat2 m97;
+groupshared mat2 m98;
+groupshared mat2 m99;
+
+struct tint_symbol_2 {
+  uint idx;
+};
+
+void tint_symbol_inner(uint idx) {
+  {
+    m00 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m01 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m02 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m03 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m04 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m05 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m06 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m07 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m08 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m09 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m10 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m11 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m12 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m13 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m14 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m15 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m16 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m17 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m18 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m19 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m20 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m21 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m22 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m23 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m24 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m25 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m26 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m27 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m28 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m29 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m30 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m31 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m32 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m33 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m34 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m35 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m36 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m37 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m38 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m39 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m40 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m41 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m42 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m43 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m44 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m45 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m46 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m47 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m48 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m49 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m50 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m51 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m52 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m53 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m54 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m55 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m56 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m57 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m58 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m59 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m60 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m61 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m62 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m63 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m64 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m65 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m66 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m67 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m68 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m69 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m70 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m71 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m72 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m73 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m74 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m75 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m76 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m77 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m78 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m79 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m80 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m81 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m82 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m83 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m84 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m85 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m86 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m87 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m88 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m89 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m90 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m91 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m92 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m93 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m94 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m95 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m96 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m97 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m98 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+    m99 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  m00[0][0] = 1.0f;
+  m01[0][0] = 1.0f;
+  m02[0][0] = 1.0f;
+  m03[0][0] = 1.0f;
+  m04[0][0] = 1.0f;
+  m05[0][0] = 1.0f;
+  m06[0][0] = 1.0f;
+  m07[0][0] = 1.0f;
+  m08[0][0] = 1.0f;
+  m09[0][0] = 1.0f;
+  m10[0][0] = 1.0f;
+  m11[0][0] = 1.0f;
+  m12[0][0] = 1.0f;
+  m13[0][0] = 1.0f;
+  m14[0][0] = 1.0f;
+  m15[0][0] = 1.0f;
+  m16[0][0] = 1.0f;
+  m17[0][0] = 1.0f;
+  m18[0][0] = 1.0f;
+  m19[0][0] = 1.0f;
+  m20[0][0] = 1.0f;
+  m21[0][0] = 1.0f;
+  m22[0][0] = 1.0f;
+  m23[0][0] = 1.0f;
+  m24[0][0] = 1.0f;
+  m25[0][0] = 1.0f;
+  m26[0][0] = 1.0f;
+  m27[0][0] = 1.0f;
+  m28[0][0] = 1.0f;
+  m29[0][0] = 1.0f;
+  m30[0][0] = 1.0f;
+  m31[0][0] = 1.0f;
+  m32[0][0] = 1.0f;
+  m33[0][0] = 1.0f;
+  m34[0][0] = 1.0f;
+  m35[0][0] = 1.0f;
+  m36[0][0] = 1.0f;
+  m37[0][0] = 1.0f;
+  m38[0][0] = 1.0f;
+  m39[0][0] = 1.0f;
+  m40[0][0] = 1.0f;
+  m41[0][0] = 1.0f;
+  m42[0][0] = 1.0f;
+  m43[0][0] = 1.0f;
+  m44[0][0] = 1.0f;
+  m45[0][0] = 1.0f;
+  m46[0][0] = 1.0f;
+  m47[0][0] = 1.0f;
+  m48[0][0] = 1.0f;
+  m49[0][0] = 1.0f;
+  m50[0][0] = 1.0f;
+  m51[0][0] = 1.0f;
+  m52[0][0] = 1.0f;
+  m53[0][0] = 1.0f;
+  m54[0][0] = 1.0f;
+  m55[0][0] = 1.0f;
+  m56[0][0] = 1.0f;
+  m57[0][0] = 1.0f;
+  m58[0][0] = 1.0f;
+  m59[0][0] = 1.0f;
+  m60[0][0] = 1.0f;
+  m61[0][0] = 1.0f;
+  m62[0][0] = 1.0f;
+  m63[0][0] = 1.0f;
+  m64[0][0] = 1.0f;
+  m65[0][0] = 1.0f;
+  m66[0][0] = 1.0f;
+  m67[0][0] = 1.0f;
+  m68[0][0] = 1.0f;
+  m69[0][0] = 1.0f;
+  m70[0][0] = 1.0f;
+  m71[0][0] = 1.0f;
+  m72[0][0] = 1.0f;
+  m73[0][0] = 1.0f;
+  m74[0][0] = 1.0f;
+  m75[0][0] = 1.0f;
+  m76[0][0] = 1.0f;
+  m77[0][0] = 1.0f;
+  m78[0][0] = 1.0f;
+  m79[0][0] = 1.0f;
+  m80[0][0] = 1.0f;
+  m81[0][0] = 1.0f;
+  m82[0][0] = 1.0f;
+  m83[0][0] = 1.0f;
+  m84[0][0] = 1.0f;
+  m85[0][0] = 1.0f;
+  m86[0][0] = 1.0f;
+  m87[0][0] = 1.0f;
+  m88[0][0] = 1.0f;
+  m89[0][0] = 1.0f;
+  m90[0][0] = 1.0f;
+  m91[0][0] = 1.0f;
+  m92[0][0] = 1.0f;
+  m93[0][0] = 1.0f;
+  m94[0][0] = 1.0f;
+  m95[0][0] = 1.0f;
+  m96[0][0] = 1.0f;
+  m97[0][0] = 1.0f;
+  m98[0][0] = 1.0f;
+  m99[0][0] = 1.0f;
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void tint_symbol(tint_symbol_2 tint_symbol_1) {
+  tint_symbol_inner(tint_symbol_1.idx);
+  return;
+}
+void main() {
+  tint_symbol_2 inputs;
+  inputs.idx = uint(gl_LocalInvocationIndex);
+  tint_symbol(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
diff --git a/test/var/uses/private.wgsl.expected.glsl b/test/var/uses/private.wgsl.expected.glsl
new file mode 100644
index 0000000..f2d75e9
--- /dev/null
+++ b/test/var/uses/private.wgsl.expected.glsl
@@ -0,0 +1,96 @@
+#version 310 es
+precision mediump float;
+
+int a = 0;
+
+void uses_a() {
+  a = (a + 1);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main1() {
+  a = 42;
+  uses_a();
+  return;
+}
+void main() {
+  main1();
+}
+
+
+#version 310 es
+precision mediump float;
+
+int b = 0;
+
+void uses_b() {
+  b = (b * 2);
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main2() {
+  b = 7;
+  uses_b();
+  return;
+}
+void main() {
+  main2();
+}
+
+
+#version 310 es
+precision mediump float;
+
+int a = 0;
+int b = 0;
+
+void uses_a() {
+  a = (a + 1);
+}
+
+void uses_b() {
+  b = (b * 2);
+}
+
+void uses_a_and_b() {
+  b = a;
+}
+
+void no_uses() {
+}
+
+void outer() {
+  a = 0;
+  uses_a();
+  uses_a_and_b();
+  uses_b();
+  no_uses();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main3() {
+  outer();
+  no_uses();
+  return;
+}
+void main() {
+  main3();
+}
+
+
+#version 310 es
+precision mediump float;
+
+void no_uses() {
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main4() {
+  no_uses();
+  return;
+}
+void main() {
+  main4();
+}
+
+
diff --git a/test/var/uses/workgroup.wgsl.expected.glsl b/test/var/uses/workgroup.wgsl.expected.glsl
new file mode 100644
index 0000000..8b19e03
--- /dev/null
+++ b/test/var/uses/workgroup.wgsl.expected.glsl
@@ -0,0 +1,189 @@
+SKIP: FAILED
+
+#version 310 es
+precision mediump float;
+
+groupshared int a;
+
+void uses_a() {
+  a = (a + 1);
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+
+void main1_inner(uint local_invocation_index) {
+  {
+    a = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+  a = 42;
+  uses_a();
+}
+
+struct tint_symbol_3 {
+  uint local_invocation_index_1;
+};
+struct tint_symbol_5 {
+  uint local_invocation_index_2;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main1(tint_symbol_1 tint_symbol) {
+  main1_inner(tint_symbol.local_invocation_index);
+  return;
+}
+void main() {
+  tint_symbol_1 inputs;
+  inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
+  main1(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+groupshared int b;
+
+void uses_b() {
+  b = (b * 2);
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+struct tint_symbol_3 {
+  uint local_invocation_index_1;
+};
+
+void main2_inner(uint local_invocation_index_1) {
+  {
+    b = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+  b = 7;
+  uses_b();
+}
+
+struct tint_symbol_5 {
+  uint local_invocation_index_2;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main2(tint_symbol_3 tint_symbol_2) {
+  main2_inner(tint_symbol_2.local_invocation_index_1);
+  return;
+}
+void main() {
+  tint_symbol_3 inputs;
+  inputs.local_invocation_index_1 = uint(gl_LocalInvocationIndex);
+  main2(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+groupshared int a;
+groupshared int b;
+
+void uses_a() {
+  a = (a + 1);
+}
+
+void uses_b() {
+  b = (b * 2);
+}
+
+void uses_a_and_b() {
+  b = a;
+}
+
+void no_uses() {
+}
+
+void outer() {
+  a = 0;
+  uses_a();
+  uses_a_and_b();
+  uses_b();
+  no_uses();
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+struct tint_symbol_3 {
+  uint local_invocation_index_1;
+};
+struct tint_symbol_5 {
+  uint local_invocation_index_2;
+};
+
+void main3_inner(uint local_invocation_index_2) {
+  {
+    a = 0;
+    b = 0;
+  }
+  GroupMemoryBarrierWithGroupSync();
+  outer();
+  no_uses();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main3(tint_symbol_5 tint_symbol_4) {
+  main3_inner(tint_symbol_4.local_invocation_index_2);
+  return;
+}
+void main() {
+  tint_symbol_5 inputs;
+  inputs.local_invocation_index_2 = uint(gl_LocalInvocationIndex);
+  main3(inputs);
+}
+
+
+Error parsing GLSL shader:
+ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 1 compilation errors.  No code generated.
+
+
+
+#version 310 es
+precision mediump float;
+
+void no_uses() {
+}
+
+struct tint_symbol_1 {
+  uint local_invocation_index;
+};
+struct tint_symbol_3 {
+  uint local_invocation_index_1;
+};
+struct tint_symbol_5 {
+  uint local_invocation_index_2;
+};
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main4() {
+  no_uses();
+  return;
+}
+void main() {
+  main4();
+}
+
+