diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index 022ade2..fb4d0ed 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -818,6 +818,24 @@
   auto* expr_false = expr->args[0];
   auto* expr_true = expr->args[1];
   auto* expr_cond = expr->args[2];
+  // GLSL does not support ternary expressions with a bool vector conditional,
+  // but it does support mix() with same.
+  if (TypeOf(expr_cond)->UnwrapRef()->is_bool_vector()) {
+    out << "mix(";
+    if (!EmitExpression(out, expr_false)) {
+      return false;
+    }
+    out << ", ";
+    if (!EmitExpression(out, expr_true)) {
+      return false;
+    }
+    out << ", ";
+    if (!EmitExpression(out, expr_cond)) {
+      return false;
+    }
+    out << ")";
+    return true;
+  }
   ScopedParen paren(out);
   if (!EmitExpression(out, expr_cond)) {
     return false;
diff --git a/src/writer/glsl/generator_impl_builtin_test.cc b/src/writer/glsl/generator_impl_builtin_test.cc
index 8650eb0..eecff52 100644
--- a/src/writer/glsl/generator_impl_builtin_test.cc
+++ b/src/writer/glsl/generator_impl_builtin_test.cc
@@ -287,7 +287,7 @@
   gen.increment_indent();
   std::stringstream out;
   ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
-  EXPECT_EQ(out.str(), "(bvec2(true, false) ? ivec2(3, 4) : ivec2(1, 2))");
+  EXPECT_EQ(out.str(), "mix(ivec2(1, 2), ivec2(3, 4), bvec2(true, false))");
 }
 
 TEST_F(GlslGeneratorImplTest_Builtin, Modf_Scalar) {
diff --git a/test/builtins/gen/select/00b848.wgsl.expected.glsl b/test/builtins/gen/select/00b848.wgsl.expected.glsl
index 5e70f86..d6028c2 100644
--- a/test/builtins/gen/select/00b848.wgsl.expected.glsl
+++ b/test/builtins/gen/select/00b848.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_00b848() {
-  ivec2 res = (bvec2(false, false) ? ivec2(0, 0) : ivec2(0, 0));
+  ivec2 res = mix(ivec2(0, 0), ivec2(0, 0), bvec2(false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  ivec2 res = mix(ivec2(0, 0), ivec2(0, 0), bvec2(false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_00b848() {
-  ivec2 res = (bvec2(false, false) ? ivec2(0, 0) : ivec2(0, 0));
+  ivec2 res = mix(ivec2(0, 0), ivec2(0, 0), bvec2(false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/01e2cd.wgsl.expected.glsl b/test/builtins/gen/select/01e2cd.wgsl.expected.glsl
index 3fcc3c7..8003af7 100644
--- a/test/builtins/gen/select/01e2cd.wgsl.expected.glsl
+++ b/test/builtins/gen/select/01e2cd.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_01e2cd() {
-  ivec3 res = (bvec3(false, false, false) ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+  ivec3 res = mix(ivec3(0, 0, 0), ivec3(0, 0, 0), bvec3(false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  ivec3 res = mix(ivec3(0, 0, 0), ivec3(0, 0, 0), bvec3(false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_01e2cd() {
-  ivec3 res = (bvec3(false, false, false) ? ivec3(0, 0, 0) : ivec3(0, 0, 0));
+  ivec3 res = mix(ivec3(0, 0, 0), ivec3(0, 0, 0), bvec3(false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/1e960b.wgsl.expected.glsl b/test/builtins/gen/select/1e960b.wgsl.expected.glsl
index 3046b79..9485034 100644
--- a/test/builtins/gen/select/1e960b.wgsl.expected.glsl
+++ b/test/builtins/gen/select/1e960b.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_1e960b() {
-  uvec2 res = (bvec2(false, false) ? uvec2(0u, 0u) : uvec2(0u, 0u));
+  uvec2 res = mix(uvec2(0u, 0u), uvec2(0u, 0u), bvec2(false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  uvec2 res = mix(uvec2(0u, 0u), uvec2(0u, 0u), bvec2(false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_1e960b() {
-  uvec2 res = (bvec2(false, false) ? uvec2(0u, 0u) : uvec2(0u, 0u));
+  uvec2 res = mix(uvec2(0u, 0u), uvec2(0u, 0u), bvec2(false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/266aff.wgsl.expected.glsl b/test/builtins/gen/select/266aff.wgsl.expected.glsl
index 92a2d9a..9095b03 100644
--- a/test/builtins/gen/select/266aff.wgsl.expected.glsl
+++ b/test/builtins/gen/select/266aff.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_266aff() {
-  vec2 res = (bvec2(false, false) ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), bvec2(false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), bvec2(false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_266aff() {
-  vec2 res = (bvec2(false, false) ? vec2(0.0f, 0.0f) : vec2(0.0f, 0.0f));
+  vec2 res = mix(vec2(0.0f, 0.0f), vec2(0.0f, 0.0f), bvec2(false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/28a27e.wgsl.expected.glsl b/test/builtins/gen/select/28a27e.wgsl.expected.glsl
index d9c1e4a..2103574 100644
--- a/test/builtins/gen/select/28a27e.wgsl.expected.glsl
+++ b/test/builtins/gen/select/28a27e.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_28a27e() {
-  uvec3 res = (bvec3(false, false, false) ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+  uvec3 res = mix(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u), bvec3(false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  uvec3 res = mix(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u), bvec3(false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_28a27e() {
-  uvec3 res = (bvec3(false, false, false) ? uvec3(0u, 0u, 0u) : uvec3(0u, 0u, 0u));
+  uvec3 res = mix(uvec3(0u, 0u, 0u), uvec3(0u, 0u, 0u), bvec3(false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/80a9a9.wgsl.expected.glsl b/test/builtins/gen/select/80a9a9.wgsl.expected.glsl
index 448ce6c..2b0a383 100644
--- a/test/builtins/gen/select/80a9a9.wgsl.expected.glsl
+++ b/test/builtins/gen/select/80a9a9.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_80a9a9() {
-  bvec3 res = (bvec3(false, false, false) ? bvec3(false, false, false) : bvec3(false, false, false));
+  bvec3 res = mix(bvec3(false, false, false), bvec3(false, false, false), bvec3(false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  bvec3 res = mix(bvec3(false, false, false), bvec3(false, false, false), bvec3(false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_80a9a9() {
-  bvec3 res = (bvec3(false, false, false) ? bvec3(false, false, false) : bvec3(false, false, false));
+  bvec3 res = mix(bvec3(false, false, false), bvec3(false, false, false), bvec3(false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/a2860e.wgsl.expected.glsl b/test/builtins/gen/select/a2860e.wgsl.expected.glsl
index 82f1419..17f0fc0 100644
--- a/test/builtins/gen/select/a2860e.wgsl.expected.glsl
+++ b/test/builtins/gen/select/a2860e.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_a2860e() {
-  ivec4 res = (bvec4(false, false, false, false) ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+  ivec4 res = mix(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), bvec4(false, false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  ivec4 res = mix(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), bvec4(false, false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_a2860e() {
-  ivec4 res = (bvec4(false, false, false, false) ? ivec4(0, 0, 0, 0) : ivec4(0, 0, 0, 0));
+  ivec4 res = mix(ivec4(0, 0, 0, 0), ivec4(0, 0, 0, 0), bvec4(false, false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/bb8aae.wgsl.expected.glsl b/test/builtins/gen/select/bb8aae.wgsl.expected.glsl
index 45e3979..3fd39a1 100644
--- a/test/builtins/gen/select/bb8aae.wgsl.expected.glsl
+++ b/test/builtins/gen/select/bb8aae.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 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));
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), bvec4(false, false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), bvec4(false, false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 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));
+  vec4 res = mix(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), bvec4(false, false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/c4a4ef.wgsl.expected.glsl b/test/builtins/gen/select/c4a4ef.wgsl.expected.glsl
index 76187f1..8e6f420 100644
--- a/test/builtins/gen/select/c4a4ef.wgsl.expected.glsl
+++ b/test/builtins/gen/select/c4a4ef.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_c4a4ef() {
-  uvec4 res = (bvec4(false, false, false, false) ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+  uvec4 res = mix(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u), bvec4(false, false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  uvec4 res = mix(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u), bvec4(false, false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_c4a4ef() {
-  uvec4 res = (bvec4(false, false, false, false) ? uvec4(0u, 0u, 0u, 0u) : uvec4(0u, 0u, 0u, 0u));
+  uvec4 res = mix(uvec4(0u, 0u, 0u, 0u), uvec4(0u, 0u, 0u, 0u), bvec4(false, false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/cb9301.wgsl.expected.glsl b/test/builtins/gen/select/cb9301.wgsl.expected.glsl
index 5792eed..c5c5a71 100644
--- a/test/builtins/gen/select/cb9301.wgsl.expected.glsl
+++ b/test/builtins/gen/select/cb9301.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_cb9301() {
-  bvec2 res = (bvec2(false, false) ? bvec2(false, false) : bvec2(false, false));
+  bvec2 res = mix(bvec2(false, false), bvec2(false, false), bvec2(false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  bvec2 res = mix(bvec2(false, false), bvec2(false, false), bvec2(false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_cb9301() {
-  bvec2 res = (bvec2(false, false) ? bvec2(false, false) : bvec2(false, false));
+  bvec2 res = mix(bvec2(false, false), bvec2(false, false), bvec2(false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/e3e028.wgsl.expected.glsl b/test/builtins/gen/select/e3e028.wgsl.expected.glsl
index 372d40f..59f7187 100644
--- a/test/builtins/gen/select/e3e028.wgsl.expected.glsl
+++ b/test/builtins/gen/select/e3e028.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_e3e028() {
-  bvec4 res = (bvec4(false, false, false, false) ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+  bvec4 res = mix(bvec4(false, false, false, false), bvec4(false, false, false, false), bvec4(false, false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  bvec4 res = mix(bvec4(false, false, false, false), bvec4(false, false, false, false), bvec4(false, false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_e3e028() {
-  bvec4 res = (bvec4(false, false, false, false) ? bvec4(false, false, false, false) : bvec4(false, false, false, false));
+  bvec4 res = mix(bvec4(false, false, false, false), bvec4(false, false, false, false), bvec4(false, false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/builtins/gen/select/ebfea2.wgsl.expected.glsl b/test/builtins/gen/select/ebfea2.wgsl.expected.glsl
index e2174eb..5398597 100644
--- a/test/builtins/gen/select/ebfea2.wgsl.expected.glsl
+++ b/test/builtins/gen/select/ebfea2.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 
 void select_ebfea2() {
-  vec3 res = (bvec3(false, false, false) ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), bvec3(false, false, false));
 }
 
 vec4 vertex_main() {
@@ -18,18 +16,11 @@
   gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : 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));
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), bvec3(false, false, false));
 }
 
 void fragment_main() {
@@ -40,17 +31,10 @@
   fragment_main();
   return;
 }
-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
 
 void select_ebfea2() {
-  vec3 res = (bvec3(false, false, false) ? vec3(0.0f, 0.0f, 0.0f) : vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = mix(vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), bvec3(false, false, false));
 }
 
 void compute_main() {
@@ -62,10 +46,3 @@
   compute_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:4: '' : boolean expression expected 
-ERROR: 0:4: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl
deleted file mode 100644
index 19e5f94..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.glsl
+++ /dev/null
@@ -1,25 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-void main_1() {
-  uvec2 x_1 = (bvec2(true, false) ? uvec2(10u, 20u) : uvec2(20u, 10u));
-  return;
-}
-
-void tint_symbol() {
-  main_1();
-}
-
-void main() {
-  tint_symbol();
-  return;
-}
-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/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl
deleted file mode 100644
index bffa90b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.glsl
+++ /dev/null
@@ -1,47 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 x_GLF_color_1_1;
-struct buf0 {
-  vec2 injectionSwitch;
-};
-
-layout(binding = 0) uniform buf0_1 {
-  vec2 injectionSwitch;
-} x_5;
-
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  vec2 x_29 = x_5.injectionSwitch;
-  if (((bvec2(false, false) ? vec2(1.0f, 1.0f) : x_29).x == 0.0f)) {
-    x_GLF_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  vec4 x_GLF_color_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_GLF_color);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: '' : boolean expression expected 
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl
deleted file mode 100644
index bffa90b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.glsl
+++ /dev/null
@@ -1,47 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 x_GLF_color_1_1;
-struct buf0 {
-  vec2 injectionSwitch;
-};
-
-layout(binding = 0) uniform buf0_1 {
-  vec2 injectionSwitch;
-} x_5;
-
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  vec2 x_29 = x_5.injectionSwitch;
-  if (((bvec2(false, false) ? vec2(1.0f, 1.0f) : x_29).x == 0.0f)) {
-    x_GLF_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  vec4 x_GLF_color_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_GLF_color);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: '' : boolean expression expected 
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl
deleted file mode 100644
index a6f3655..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.glsl
+++ /dev/null
@@ -1,52 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 x_GLF_color_1_1;
-struct buf0 {
-  vec2 threeandfour;
-};
-
-layout(binding = 0) uniform buf0_1 {
-  vec2 threeandfour;
-} x_6;
-
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = vec4(2.0f, 3.0f, 4.0f, 5.0f);
-  float x_40 = x_6.threeandfour.y;
-  vec2 x_42 = (bvec2(true, false) ? vec2(1.0f, x_40) : vec2(2.0f, 6.0f));
-  vec4 x_43 = v;
-  v = vec4(x_42.x, x_42.y, x_43.z, x_43.w);
-  if (all(equal(v, vec4(1.0f, 6.0f, 4.0f, 5.0f)))) {
-    x_GLF_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  vec4 x_GLF_color_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_GLF_color);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:18: '' : boolean expression expected 
-ERROR: 0:18: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl
deleted file mode 100644
index a6f3655..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.glsl
+++ /dev/null
@@ -1,52 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 x_GLF_color_1_1;
-struct buf0 {
-  vec2 threeandfour;
-};
-
-layout(binding = 0) uniform buf0_1 {
-  vec2 threeandfour;
-} x_6;
-
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  vec4 v = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = vec4(2.0f, 3.0f, 4.0f, 5.0f);
-  float x_40 = x_6.threeandfour.y;
-  vec2 x_42 = (bvec2(true, false) ? vec2(1.0f, x_40) : vec2(2.0f, 6.0f));
-  vec4 x_43 = v;
-  v = vec4(x_42.x, x_42.y, x_43.z, x_43.w);
-  if (all(equal(v, vec4(1.0f, 6.0f, 4.0f, 5.0f)))) {
-    x_GLF_color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  vec4 x_GLF_color_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_GLF_color);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:18: '' : boolean expression expected 
-ERROR: 0:18: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl
deleted file mode 100644
index 4d706b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.glsl
+++ /dev/null
@@ -1,115 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 x_GLF_color_1_1;
-struct strided_arr {
-  int el;
-};
-
-struct buf1 {
-  strided_arr x_GLF_uniform_int_values[3];
-};
-
-struct strided_arr_1 {
-  float el;
-};
-
-struct buf0 {
-  strided_arr_1 x_GLF_uniform_float_values[2];
-};
-
-layout(binding = 1) uniform buf1_1 {
-  strided_arr x_GLF_uniform_int_values[3];
-} x_6;
-
-layout(binding = 0) uniform buf0_1 {
-  strided_arr_1 x_GLF_uniform_float_values[2];
-} x_10;
-
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  int A[2] = int[2](0, 0);
-  int i = 0;
-  int a = 0;
-  vec2 v1 = vec2(0.0f, 0.0f);
-  vec2 v2 = vec2(0.0f, 0.0f);
-  int b = 0;
-  int x_46 = x_6.x_GLF_uniform_int_values[2].el;
-  int x_48 = x_6.x_GLF_uniform_int_values[0].el;
-  A[x_46] = x_48;
-  int x_51 = x_6.x_GLF_uniform_int_values[0].el;
-  int x_53 = x_6.x_GLF_uniform_int_values[1].el;
-  A[x_51] = x_53;
-  int x_56 = x_6.x_GLF_uniform_int_values[0].el;
-  i = x_56;
-  while (true) {
-    int x_61 = i;
-    int x_63 = x_6.x_GLF_uniform_int_values[2].el;
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    i = (i - 1);
-  }
-  float x_69 = x_10.x_GLF_uniform_float_values[1].el;
-  float x_71 = x_10.x_GLF_uniform_float_values[1].el;
-  int x_76 = A[((x_69 >= x_71) ? 1 : i)];
-  a = x_76;
-  int x_78 = x_6.x_GLF_uniform_int_values[0].el;
-  int x_80 = a;
-  int x_84 = x_6.x_GLF_uniform_int_values[0].el;
-  int x_87 = x_6.x_GLF_uniform_int_values[0].el;
-  float x_91 = x_10.x_GLF_uniform_float_values[1].el;
-  float x_93 = x_10.x_GLF_uniform_float_values[0].el;
-  v1 = (bvec2((x_91 < x_93), true) ? vec2(float(x_84), float(x_87)) : vec2(float(x_78), float(x_80)));
-  int x_98 = x_6.x_GLF_uniform_int_values[2].el;
-  float x_100 = v1[x_98];
-  int x_103 = x_6.x_GLF_uniform_int_values[0].el;
-  float x_105 = v1[x_103];
-  v2 = (bvec2(false, false) ? vec2(x_105, x_105) : vec2(x_100, x_100));
-  int x_109 = x_6.x_GLF_uniform_int_values[1].el;
-  float x_110 = float(x_109);
-  int x_113 = x_6.x_GLF_uniform_int_values[0].el;
-  float x_114 = float(x_113);
-  int x_121 = A[int(clamp(vec2(x_110, x_110), vec2(x_114, x_114), v2).x)];
-  b = x_121;
-  int x_122 = b;
-  int x_124 = x_6.x_GLF_uniform_int_values[1].el;
-  if ((x_122 == x_124)) {
-    int x_130 = x_6.x_GLF_uniform_int_values[0].el;
-    int x_133 = x_6.x_GLF_uniform_int_values[2].el;
-    int x_136 = x_6.x_GLF_uniform_int_values[2].el;
-    int x_139 = x_6.x_GLF_uniform_int_values[0].el;
-    x_GLF_color = vec4(float(x_130), float(x_133), float(x_136), float(x_139));
-  } else {
-    int x_143 = x_6.x_GLF_uniform_int_values[2].el;
-    float x_144 = float(x_143);
-    x_GLF_color = vec4(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-struct main_out {
-  vec4 x_GLF_color_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_GLF_color);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:64: '' : boolean expression expected 
-ERROR: 0:64: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl
deleted file mode 100644
index 1e4b69d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.glsl
+++ /dev/null
@@ -1,123 +0,0 @@
-SKIP: FAILED
-
-vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
-type Arr = @stride(16) array<i32, 3>;
-            ^^^^^^
-
-vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl:7:15 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
-type Arr_1 = @stride(16) array<f32, 2>;
-              ^^^^^^
-
-#version 310 es
-precision mediump float;
-
-layout(location = 0) out vec4 x_GLF_color_1_1;
-struct tint_padded_array_element {
-  int el;
-};
-
-struct buf1 {
-  tint_padded_array_element x_GLF_uniform_int_values[3];
-};
-
-struct tint_padded_array_element_1 {
-  float el;
-};
-
-struct buf0 {
-  tint_padded_array_element_1 x_GLF_uniform_float_values[2];
-};
-
-layout(binding = 1) uniform buf1_1 {
-  tint_padded_array_element x_GLF_uniform_int_values[3];
-} x_6;
-
-layout(binding = 0) uniform buf0_1 {
-  tint_padded_array_element_1 x_GLF_uniform_float_values[2];
-} x_10;
-
-vec4 x_GLF_color = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-void main_1() {
-  int A[2] = int[2](0, 0);
-  int i = 0;
-  int a = 0;
-  vec2 v1 = vec2(0.0f, 0.0f);
-  vec2 v2 = vec2(0.0f, 0.0f);
-  int b = 0;
-  int x_46 = x_6.x_GLF_uniform_int_values[2].el;
-  int x_48 = x_6.x_GLF_uniform_int_values[0].el;
-  A[x_46] = x_48;
-  int x_51 = x_6.x_GLF_uniform_int_values[0].el;
-  int x_53 = x_6.x_GLF_uniform_int_values[1].el;
-  A[x_51] = x_53;
-  int x_56 = x_6.x_GLF_uniform_int_values[0].el;
-  i = x_56;
-  while (true) {
-    int x_61 = i;
-    int x_63 = x_6.x_GLF_uniform_int_values[2].el;
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    i = (i - 1);
-  }
-  float x_69 = x_10.x_GLF_uniform_float_values[1].el;
-  float x_71 = x_10.x_GLF_uniform_float_values[1].el;
-  int x_76 = A[((x_69 >= x_71) ? 1 : i)];
-  a = x_76;
-  int x_78 = x_6.x_GLF_uniform_int_values[0].el;
-  int x_80 = a;
-  int x_84 = x_6.x_GLF_uniform_int_values[0].el;
-  int x_87 = x_6.x_GLF_uniform_int_values[0].el;
-  float x_91 = x_10.x_GLF_uniform_float_values[1].el;
-  float x_93 = x_10.x_GLF_uniform_float_values[0].el;
-  v1 = (bvec2((x_91 < x_93), true) ? vec2(float(x_84), float(x_87)) : vec2(float(x_78), float(x_80)));
-  int x_98 = x_6.x_GLF_uniform_int_values[2].el;
-  float x_100 = v1[x_98];
-  int x_103 = x_6.x_GLF_uniform_int_values[0].el;
-  float x_105 = v1[x_103];
-  v2 = (bvec2(false, false) ? vec2(x_105, x_105) : vec2(x_100, x_100));
-  int x_109 = x_6.x_GLF_uniform_int_values[1].el;
-  float x_110 = float(x_109);
-  int x_113 = x_6.x_GLF_uniform_int_values[0].el;
-  float x_114 = float(x_113);
-  int x_121 = A[int(clamp(vec2(x_110, x_110), vec2(x_114, x_114), v2).x)];
-  b = x_121;
-  int x_122 = b;
-  int x_124 = x_6.x_GLF_uniform_int_values[1].el;
-  if ((x_122 == x_124)) {
-    int x_130 = x_6.x_GLF_uniform_int_values[0].el;
-    int x_133 = x_6.x_GLF_uniform_int_values[2].el;
-    int x_136 = x_6.x_GLF_uniform_int_values[2].el;
-    int x_139 = x_6.x_GLF_uniform_int_values[0].el;
-    x_GLF_color = vec4(float(x_130), float(x_133), float(x_136), float(x_139));
-  } else {
-    int x_143 = x_6.x_GLF_uniform_int_values[2].el;
-    float x_144 = float(x_143);
-    x_GLF_color = vec4(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-struct main_out {
-  vec4 x_GLF_color_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_GLF_color);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  x_GLF_color_1_1 = inner_result.x_GLF_color_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:64: '' : boolean expression expected 
-ERROR: 0:64: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
