GLSL: fix sample_index, sample_mask and bitcasts

In GLSL, gl_SampleID and gl_SampleMask[In] require the
GL_OES_sample_variables extension, so output:

"#extension GL_OES_sample_variables : require"

in the header if those builtins is used.

Note that extensions must be inserted before the default precision
declaration, but helpers must be inserted after it, so we set a flag
and emit extensions, then the precision declaration, then helpers.

Further fixes:
- use gl_SampleMaskIn for input builtins, gl_SampleMask for output,
  necessitating the addition of a storage class to GLSLBuiltinToString()
- fix the handling of gl_SampleMaskIn: it's array<i32> in GLSL, not
  array<u32> as in SPIR-V
- centralize conversions for GLSL builtins used as input variables in
  FromGLSLBuiltin()
- implement bitcasts on assignment to GLSL builtin output variables,
  centralized in ToGLSLBuiltin()
- update the extension handling in the GLSL writer to check for both
  sample_index and sample_mask.
- call UnwrapRef() in GLSL's EmitBitcast(). In the test case, we were
  not recognizing the argument as a uint, yielding float() instead of
  uintBitsToFloat().

Bug: tint:1408, tint:1412, tint:1414

Change-Id: Ie01541eb6e7cdf4e21347341f988bff916346797
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/78920
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/transform/canonicalize_entry_point_io.cc b/src/transform/canonicalize_entry_point_io.cc
index e00c1a0..f62ce67 100644
--- a/src/transform/canonicalize_entry_point_io.cc
+++ b/src/transform/canonicalize_entry_point_io.cc
@@ -184,24 +184,23 @@
       // corresponding gl_ builtin name
       auto* builtin = ast::GetAttribute<ast::BuiltinAttribute>(attributes);
       if (cfg.shader_style == ShaderStyle::kGlsl && builtin) {
-        name = GLSLBuiltinToString(builtin->builtin, func_ast->PipelineStage());
+        name = GLSLBuiltinToString(builtin->builtin, func_ast->PipelineStage(),
+                                   ast::StorageClass::kInput);
       }
       auto symbol = ctx.dst->Symbols().New(name);
 
       // Create the global variable and use its value for the shader input.
       const ast::Expression* value = ctx.dst->Expr(symbol);
-      if (HasSampleMask(attributes)) {
-        // Vulkan requires the type of a SampleMask builtin to be an array.
-        // Declare it as array<u32, 1> and then load the first element.
-        ast_type = ctx.dst->ty.array(ast_type, 1);
-        value = ctx.dst->IndexAccessor(value, 0);
-      }
 
-      // In GLSL, if the type doesn't match the type of the builtin,
-      // insert a bitcast
-      if (cfg.shader_style == ShaderStyle::kGlsl && builtin &&
-          GLSLBuiltinNeedsBitcast(builtin->builtin)) {
-        value = ctx.dst->Bitcast(CreateASTTypeFor(ctx, type), value);
+      if (builtin) {
+        if (cfg.shader_style == ShaderStyle::kGlsl) {
+          value = FromGLSLBuiltin(builtin->builtin, value, ast_type);
+        } else if (builtin->builtin == ast::Builtin::kSampleMask) {
+          // Vulkan requires the type of a SampleMask builtin to be an array.
+          // Declare it as array<u32, 1> and then load the first element.
+          ast_type = ctx.dst->ty.array(ast_type, 1);
+          value = ctx.dst->IndexAccessor(value, 0);
+        }
       }
       ctx.dst->Global(symbol, ast_type, ast::StorageClass::kInput,
                       std::move(attributes));
@@ -251,9 +250,12 @@
 
     // In GLSL, if it's a builtin, override the name with the
     // corresponding gl_ builtin name
-    auto* builtin = ast::GetAttribute<ast::BuiltinAttribute>(attributes);
-    if (cfg.shader_style == ShaderStyle::kGlsl && builtin) {
-      name = GLSLBuiltinToString(builtin->builtin, func_ast->PipelineStage());
+    if (cfg.shader_style == ShaderStyle::kGlsl) {
+      if (auto* b = ast::GetAttribute<ast::BuiltinAttribute>(attributes)) {
+        name = GLSLBuiltinToString(b->builtin, func_ast->PipelineStage(),
+                                   ast::StorageClass::kOutput);
+        value = ToGLSLBuiltin(b->builtin, value, type);
+      }
     }
 
     OutputValue output;
@@ -626,9 +628,11 @@
   /// Retrieve the gl_ string corresponding to a builtin.
   /// @param builtin the builtin
   /// @param stage the current pipeline stage
+  /// @param storage_class the storage class (input or output)
   /// @returns the gl_ string corresponding to that builtin
   const char* GLSLBuiltinToString(ast::Builtin builtin,
-                                  ast::PipelineStage stage) {
+                                  ast::PipelineStage stage,
+                                  ast::StorageClass storage_class) {
     switch (builtin) {
       case ast::Builtin::kPosition:
         switch (stage) {
@@ -660,26 +664,67 @@
       case ast::Builtin::kSampleIndex:
         return "gl_SampleID";
       case ast::Builtin::kSampleMask:
-        return "gl_SampleMask";
+        if (storage_class == ast::StorageClass::kInput) {
+          return "gl_SampleMaskIn";
+        } else {
+          return "gl_SampleMask";
+        }
       default:
         return "";
     }
   }
 
-  /// Check if the GLSL version if a builtin doesn't match the WGSL type
-  /// @param builtin the WGSL builtin to check
-  /// @returns true if the GLSL builtin needs to be cast to the WGSL type
-  bool GLSLBuiltinNeedsBitcast(ast::Builtin builtin) {
+  /// Convert a given GLSL builtin value to the corresponding WGSL value.
+  /// @param builtin the builtin variable
+  /// @param value the value to convert
+  /// @param ast_type (inout) the incoming WGSL and outgoing GLSL types
+  /// @returns an expression representing the GLSL builtin converted to what
+  /// WGSL expects
+  const ast::Expression* FromGLSLBuiltin(ast::Builtin builtin,
+                                         const ast::Expression* value,
+                                         const ast::Type*& ast_type) {
+    switch (builtin) {
+      case ast::Builtin::kVertexIndex:
+      case ast::Builtin::kInstanceIndex:
+      case ast::Builtin::kSampleIndex:
+        // GLSL uses i32 for these, so bitcast to u32.
+        value = ctx.dst->Bitcast(ast_type, value);
+        ast_type = ctx.dst->ty.i32();
+        break;
+      case ast::Builtin::kSampleMask:
+        // gl_SampleMask is an array of i32. Retrieve the first element and
+        // bitcast it to u32.
+        value = ctx.dst->IndexAccessor(value, 0);
+        value = ctx.dst->Bitcast(ast_type, value);
+        ast_type = ctx.dst->ty.array(ctx.dst->ty.i32(), 1);
+        break;
+      default:
+        break;
+    }
+    return value;
+  }
+
+  /// Convert a given WGSL value to the type expected when assigning to a
+  /// GLSL builtin.
+  /// @param builtin the builtin variable
+  /// @param value the value to convert
+  /// @param type (out) the type to which the value was converted
+  /// @returns the converted value which can be assigned to the GLSL builtin
+  const ast::Expression* ToGLSLBuiltin(ast::Builtin builtin,
+                                       const ast::Expression* value,
+                                       const sem::Type*& type) {
     switch (builtin) {
       case ast::Builtin::kVertexIndex:
       case ast::Builtin::kInstanceIndex:
       case ast::Builtin::kSampleIndex:
       case ast::Builtin::kSampleMask:
-        // In GLSL, these are i32, not u32.
-        return true;
+        type = ctx.dst->create<sem::I32>();
+        value = ctx.dst->Bitcast(CreateASTTypeFor(ctx, type), value);
+        break;
       default:
-        return false;
+        break;
     }
+    return value;
   }
 };
 
diff --git a/src/transform/canonicalize_entry_point_io_test.cc b/src/transform/canonicalize_entry_point_io_test.cc
index 38bd91d..23030cb 100644
--- a/src/transform/canonicalize_entry_point_io_test.cc
+++ b/src/transform/canonicalize_entry_point_io_test.cc
@@ -2321,6 +2321,80 @@
   EXPECT_EQ(expect, str(got));
 }
 
+TEST_F(CanonicalizeEntryPointIOTest, GLSLSampleMaskBuiltins) {
+  auto* src = R"(
+@stage(fragment)
+fn fragment_main(@builtin(sample_index) sample_index : u32,
+                 @builtin(sample_mask) mask_in : u32
+                 ) -> @builtin(sample_mask) u32 {
+  return mask_in;
+}
+)";
+
+  auto* expect = R"(
+@builtin(sample_index) @internal(disable_validation__ignore_storage_class) var<in> gl_SampleID : i32;
+
+@builtin(sample_mask) @internal(disable_validation__ignore_storage_class) var<in> gl_SampleMaskIn : array<i32, 1>;
+
+@builtin(sample_mask) @internal(disable_validation__ignore_storage_class) var<out> gl_SampleMask : array<i32, 1>;
+
+fn fragment_main(sample_index : u32, mask_in : u32) -> u32 {
+  return mask_in;
+}
+
+@stage(fragment)
+fn main() {
+  let inner_result = fragment_main(bitcast<u32>(gl_SampleID), bitcast<u32>(gl_SampleMaskIn[0]));
+  gl_SampleMask[0] = bitcast<i32>(inner_result);
+}
+)";
+
+  DataMap data;
+  data.Add<CanonicalizeEntryPointIO::Config>(
+      CanonicalizeEntryPointIO::ShaderStyle::kGlsl);
+  auto got = Run<Unshadow, CanonicalizeEntryPointIO>(src, data);
+
+  EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(CanonicalizeEntryPointIOTest, GLSLVertexInstanceIndexBuiltins) {
+  auto* src = R"(
+@stage(vertex)
+fn vertex_main(@builtin(vertex_index) vertexID : u32,
+               @builtin(instance_index) instanceID : u32
+               ) -> @builtin(position) vec4<f32> {
+  return vec4<f32>(f32(vertexID) + f32(instanceID));
+}
+)";
+
+  auto* expect = R"(
+@builtin(vertex_index) @internal(disable_validation__ignore_storage_class) var<in> gl_VertexID : i32;
+
+@builtin(instance_index) @internal(disable_validation__ignore_storage_class) var<in> gl_InstanceID : i32;
+
+@builtin(position) @internal(disable_validation__ignore_storage_class) var<out> gl_Position : vec4<f32>;
+
+fn vertex_main(vertexID : u32, instanceID : u32) -> vec4<f32> {
+  return vec4<f32>((f32(vertexID) + f32(instanceID)));
+}
+
+@stage(vertex)
+fn main() {
+  let inner_result = vertex_main(bitcast<u32>(gl_VertexID), bitcast<u32>(gl_InstanceID));
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0 * gl_Position.z) - gl_Position.w);
+}
+)";
+
+  DataMap data;
+  data.Add<CanonicalizeEntryPointIO::Config>(
+      CanonicalizeEntryPointIO::ShaderStyle::kGlsl);
+  auto got = Run<Unshadow, CanonicalizeEntryPointIO>(src, data);
+
+  EXPECT_EQ(expect, str(got));
+}
+
 }  // namespace
 }  // namespace transform
 }  // namespace tint
diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index a5e8941..8857f8a 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -63,6 +63,16 @@
          op == tint::ast::BinaryOp::kGreaterThanEqual;
 }
 
+bool RequiresOESSampleVariables(tint::ast::Builtin builtin) {
+  switch (builtin) {
+    case tint::ast::Builtin::kSampleIndex:
+    case tint::ast::Builtin::kSampleMask:
+      return true;
+    default:
+      return false;
+  }
+}
+
 }  // namespace
 
 namespace tint {
@@ -125,7 +135,6 @@
 
 bool GeneratorImpl::Generate() {
   line() << "#version 310 es";
-  line() << "precision mediump float;";
 
   auto helpers_insertion_point = current_buffer_->lines.size();
 
@@ -171,9 +180,26 @@
     }
   }
 
+  TextBuffer extensions;
+
+  if (requires_oes_sample_variables) {
+    extensions.Append("#extension GL_OES_sample_variables : require");
+  }
+
+  auto indent = current_buffer_->current_indent;
+
+  if (!extensions.lines.empty()) {
+    current_buffer_->Insert(extensions, helpers_insertion_point, indent);
+    helpers_insertion_point += extensions.lines.size();
+  }
+
+  current_buffer_->Insert("precision mediump float;", helpers_insertion_point++,
+                          indent);
+
   if (!helpers_.lines.empty()) {
-    current_buffer_->Insert("", helpers_insertion_point++, 0);
-    current_buffer_->Insert(helpers_, helpers_insertion_point++, 0);
+    current_buffer_->Insert("", helpers_insertion_point++, indent);
+    current_buffer_->Insert(helpers_, helpers_insertion_point, indent);
+    helpers_insertion_point += helpers_.lines.size();
   }
 
   return true;
@@ -197,8 +223,8 @@
 
 bool GeneratorImpl::EmitBitcast(std::ostream& out,
                                 const ast::BitcastExpression* expr) {
-  auto* src_type = TypeOf(expr->expr);
-  auto* dst_type = TypeOf(expr);
+  auto* src_type = TypeOf(expr->expr)->UnwrapRef();
+  auto* dst_type = TypeOf(expr)->UnwrapRef();
 
   if (!dst_type->is_integer_scalar_or_vector() &&
       !dst_type->is_float_scalar_or_vector()) {
@@ -1807,8 +1833,12 @@
 bool GeneratorImpl::EmitIOVariable(const sem::Variable* var) {
   auto* decl = var->Declaration();
 
-  // Do not emit builtin (gl_) variables.
-  if (ast::HasAttribute<ast::BuiltinAttribute>(decl->attributes)) {
+  if (auto* b = ast::GetAttribute<ast::BuiltinAttribute>(decl->attributes)) {
+    // Use of gl_SampleID requires the GL_OES_sample_variables extension
+    if (RequiresOESSampleVariables(b->builtin)) {
+      requires_oes_sample_variables = true;
+    }
+    // Do not emit builtin (gl_) variables.
     return true;
   }
 
diff --git a/src/writer/glsl/generator_impl.h b/src/writer/glsl/generator_impl.h
index 9bdba66..92667d1 100644
--- a/src/writer/glsl/generator_impl.h
+++ b/src/writer/glsl/generator_impl.h
@@ -471,6 +471,7 @@
   std::unordered_map<const sem::Struct*, std::string> structure_builders_;
   std::unordered_map<const sem::Vector*, std::string> dynamic_vector_write_;
   std::unordered_map<const sem::Vector*, std::string> int_dot_funcs_;
+  bool requires_oes_sample_variables = false;
 };
 
 }  // namespace glsl
diff --git a/test/bug/tint/1076.wgsl.expected.glsl b/test/bug/tint/1076.wgsl.expected.glsl
index 1b1ec51..7e392e5 100644
--- a/test/bug/tint/1076.wgsl.expected.glsl
+++ b/test/bug/tint/1076.wgsl.expected.glsl
@@ -1,6 +1,5 @@
-SKIP: FAILED
-
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 layout(location = 0) in float a_1;
@@ -20,16 +19,9 @@
 }
 
 void main() {
-  FragIn tint_symbol_3 = FragIn(a_1, uint(gl_SampleMask[0]));
+  FragIn tint_symbol_3 = FragIn(a_1, uint(gl_SampleMaskIn[0]));
   FragIn inner_result = tint_symbol(tint_symbol_3, b_1);
   a_2 = inner_result.a;
-  gl_SampleMask_1[0] = inner_result.mask;
+  gl_SampleMask[0] = int(inner_result.mask);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:21: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:21: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/shader_io/fragment_input_builtins.wgsl.expected.glsl b/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
index fa8c48e..22ad777 100644
--- a/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_builtins.wgsl.expected.glsl
@@ -1,6 +1,5 @@
-SKIP: FAILED
-
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 void tint_symbol(vec4 position, bool front_facing, uint sample_index, uint sample_mask) {
@@ -11,13 +10,6 @@
 }
 
 void main() {
-  tint_symbol(gl_FragCoord, gl_FrontFacing, uint(gl_SampleID), uint(gl_SampleMask[0]));
+  tint_symbol(gl_FragCoord, gl_FrontFacing, uint(gl_SampleID), uint(gl_SampleMaskIn[0]));
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:12: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:12: '' : 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
index 9ac60b9..2f0052e 100644
--- a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.glsl
@@ -1,6 +1,5 @@
-SKIP: FAILED
-
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 struct FragmentInputs {
@@ -18,14 +17,7 @@
 }
 
 void main() {
-  FragmentInputs tint_symbol_1 = FragmentInputs(gl_FragCoord, gl_FrontFacing, uint(gl_SampleID), uint(gl_SampleMask[0]));
+  FragmentInputs tint_symbol_1 = FragmentInputs(gl_FragCoord, gl_FrontFacing, uint(gl_SampleID), uint(gl_SampleMaskIn[0]));
   tint_symbol(tint_symbol_1);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:19: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:19: '' : 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
index 7c74204..9054ebb 100644
--- a/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
+++ b/test/shader_io/fragment_input_mixed.wgsl.expected.glsl
@@ -1,6 +1,5 @@
-SKIP: FAILED
-
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 layout(location = 0) flat in int loc0_1;
@@ -30,14 +29,7 @@
 
 void main() {
   FragmentInputs0 tint_symbol_1 = FragmentInputs0(gl_FragCoord, loc0_1);
-  FragmentInputs1 tint_symbol_2 = FragmentInputs1(loc3_1, uint(gl_SampleMask[0]));
+  FragmentInputs1 tint_symbol_2 = FragmentInputs1(loc3_1, uint(gl_SampleMaskIn[0]));
   tint_symbol(tint_symbol_1, gl_FrontFacing, loc1_1, uint(gl_SampleID), tint_symbol_2, loc2_1);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:31: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:31: '' : 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
index 1d58724..e3faacb 100644
--- a/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_builtins.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -13,6 +11,7 @@
   return;
 }
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 uint main2() {
@@ -21,13 +20,6 @@
 
 void main() {
   uint inner_result = main2();
-  gl_SampleMask[0] = inner_result;
+  gl_SampleMask[0] = int(inner_result);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:10: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:10: '' : 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
index 0dce88a..877fb38 100644
--- a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.glsl
@@ -1,6 +1,5 @@
-SKIP: FAILED
-
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 struct FragmentOutputs {
@@ -16,13 +15,6 @@
 void main() {
   FragmentOutputs inner_result = tint_symbol();
   gl_FragDepth = inner_result.frag_depth;
-  gl_SampleMask[0] = inner_result.sample_mask;
+  gl_SampleMask[0] = int(inner_result.sample_mask);
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:17: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:17: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/shader_io/fragment_output_mixed.wgsl.expected.glsl b/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
index 2344346..df40f8f 100644
--- a/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
+++ b/test/shader_io/fragment_output_mixed.wgsl.expected.glsl
@@ -1,6 +1,5 @@
-SKIP: FAILED
-
 #version 310 es
+#extension GL_OES_sample_variables : require
 precision mediump float;
 
 layout(location = 0) out int loc0_1;
@@ -27,14 +26,7 @@
   gl_FragDepth = inner_result.frag_depth;
   loc1_1 = inner_result.loc1;
   loc2_1 = inner_result.loc2;
-  gl_SampleMask[0] = inner_result.sample_mask;
+  gl_SampleMask[0] = int(inner_result.sample_mask);
   loc3_1 = inner_result.loc3;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:28: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:28: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl
deleted file mode 100644
index 2b99291..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.glsl
+++ /dev/null
@@ -1,26 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:15: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:15: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl
deleted file mode 100644
index 44302f4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.glsl
+++ /dev/null
@@ -1,26 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:15: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:15: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl
deleted file mode 100644
index b6cf43f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.glsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(uint(x_1[0]));
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:21: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:21: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl
deleted file mode 100644
index 48269aa..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.glsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_1[0]);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:21: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:21: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl
deleted file mode 100644
index b0827e8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1 = 0;
-void main_1() {
-  int x_2 = x_1;
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1 = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleID));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl
deleted file mode 100644
index b0827e8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1 = 0;
-void main_1() {
-  int x_2 = x_1;
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1 = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleID));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl
deleted file mode 100644
index b0827e8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1 = 0;
-void main_1() {
-  int x_2 = x_1;
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1 = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleID));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl
deleted file mode 100644
index 9a1398c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1 = 0u;
-void main_1() {
-  uint x_2 = x_1;
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleID));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl
deleted file mode 100644
index 9a1398c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1 = 0u;
-void main_1() {
-  uint x_2 = x_1;
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleID));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl
deleted file mode 100644
index 9a1398c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1 = 0u;
-void main_1() {
-  uint x_2 = x_1;
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleID));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleID' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl
deleted file mode 100644
index 5377a90..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  int x_4 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl
deleted file mode 100644
index 5377a90..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  int x_4 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl
deleted file mode 100644
index 883f06b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  int x_3 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = int(x_1_param);
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl
deleted file mode 100644
index efc266d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  uint x_4 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl
deleted file mode 100644
index efc266d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  uint x_4 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl
deleted file mode 100644
index 760f16f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  uint x_3 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl
deleted file mode 100644
index 760f16f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.glsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  uint x_3 = x_1[0];
-  return;
-}
-
-void tint_symbol(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main() {
-  tint_symbol(uint(gl_SampleMask[0]));
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:16: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl
deleted file mode 100644
index 3bb9956..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(uint(x_1[0]));
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl
deleted file mode 100644
index 3bb9956..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(uint(x_1[0]));
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl
deleted file mode 100644
index 3bb9956..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-int x_1[1] = int[1](0);
-void main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(uint(x_1[0]));
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl
deleted file mode 100644
index 673165f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_1[0]);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl
deleted file mode 100644
index 673165f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_1[0]);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl
deleted file mode 100644
index 673165f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_1[0]);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl
deleted file mode 100644
index 673165f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.glsl
+++ /dev/null
@@ -1,33 +0,0 @@
-SKIP: FAILED
-
-#version 310 es
-precision mediump float;
-
-uint x_1[1] = uint[1](0u);
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-
-main_out tint_symbol() {
-  main_1();
-  main_out tint_symbol_1 = main_out(x_1[0]);
-  return tint_symbol_1;
-}
-
-void main() {
-  main_out inner_result = tint_symbol();
-  gl_SampleMask[0] = inner_result.x_1_1;
-  return;
-}
-Error parsing GLSL shader:
-ERROR: 0:22: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables
-ERROR: 0:22: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-